gpt4 book ai didi

c# - json.net反序列化为对象数组c#

转载 作者:太空宇宙 更新时间:2023-11-03 20:12:21 24 4
gpt4 key购买 nike

我有一个 POCO 类,如下所示:

public class Item : Asset
{
public int PlaylistId { get; set; }
public int AssetId { get; set; }
public double Duration { get; set; }
public int Order { get; set; }
}

Assets 看起来像这样:

public enum AssetType
{
Image = 1,
Video,
Website
}

public class Asset
{

public int Id { get; set; }
public string Name { get; set; }
public string Filename { get; set; }
public AssetType Type { get; set; }
public string CreatedById { get; set; }
public string ModifiedById { get; set; }
[Display(Name="Created by")] public string CreatedBy { get; set; }
[Display(Name="Modified by")] public string ModifiedBy { get; set; }
}

然后我有一个如下所示的 json 文件:

{
"Items":[
{
"PlaylistId":1,
"Type":2,
"Duration":19,
"Filename":"stream1_mpeg4.avi"
},
{
"PlaylistId":1,
"Type":2,
"Duration":21,
"Filename":"stream2_mpeg4.avi"
}
]
}

最后我的代码如下所示:

public IList<Item> GetAll()
{
if (File.Exists(itemsPath))
{
using (var fs = new FileStream(itemsPath, FileMode.Open))
using (var sr = new StreamReader(fs))
{
var text = sr.ReadToEnd();
var array = JsonConvert.DeserializeObject<Item[]>(sr.ReadToEnd());
return array.ToList();
}
}
else
throw new FileNotFoundException("Unable to find the playlist, please make sure that " + itemsPath + " exists.");
}

text 变量如我所料包含正确的 json 字符串,但 array 为空,因此 array.ToList();抛出错误。有谁知道我做错了什么?

提前干杯/r3副本

最佳答案

你调用了 ReadToEnd() 两次,所以第二次没有更多的文本可以在流上读取:

var text = sr.ReadToEnd();
var array = JsonConvert.DeserializeObject<Item[]>(sr.ReadToEnd());

只需将第二个 sr.ReadToEnd() 替换为 text 即可:

var array = JsonConvert.DeserializeObject<Item[]>(text);

此外,正如@Sachin 正确指出的那样,您的 json 表示一个对象,该对象具有名为 Items 的属性,该对象是 Item 对象的数组或列表。
因此,您应该通过@Sachin 的回答中所示的中间类,或者使用字典,如下所示:

var dict = JsonConvert.DeserializeObject<Dictionary<string,Item[]>>(text);
var array = dict["Items"];

关于c# - json.net反序列化为对象数组c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19223453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com