【发布时间】:2022-02-09 06:35:48
【问题描述】:
{
Items: [
{
"title": "Object1",
"preview": {
"2048": "preview_9212.jpg",
"1024": "preview_6693.jpg",
}
},
{
"title": "Object2",
"preview": {
"2048": "preview_9888.jpg",
"1024": "preview_6890.jpg",
}
},
{
"title": "Object3",
"preview": {
"2048": "preview_9822.jpg",
"1024": "preview_6848.jpg",
}
}
]
}
我通常这样反序列化:
[Serializable]
public class JsonParser
{
public string title;
public List<Preview> preview;
}
[Serializable]
class Preview
{
public string 2048;
}
但是由于 2048 是一个 Integer 是不可能使用这种方式的。 我尝试反序列化 JSON 以获得如下预览:
public class Preview
{
[JsonProperty("2048")]
public string imageNumber { get; set; }
}
var user = JsonConvert.DeserializeObject<Preview>(jsonValue);
或
var json = JObject.Parse(jsonValue);
var preview = json["preview"].ToObject<Dictionary<string, string>>();
foreach (var entry in preview)
{
Debug.Log(entry.Key);
Debug.Log(entry.Value);
}
我得到:NullReferenceException:对象引用未设置为对象的实例。
我也试过 Deserializing JSON that has an int as a key in C# 但又是 NullReferenceException;
感谢您的帮助!
【问题讨论】:
-
JsonProperty 属性并不像您认为的那样。你需要反序列化整个东西,然后从反序列化的对象中获取你想要的数据。
-
你的 json 字符串比你的编码类型有更多的嵌套级别。也许你可以尝试一些 json 路径。
-
@RobertHarvey 问题出在那些关键不是整数。
-
显示的 JSON 无效(
Items周围没有引号),并且由于属性名称不同(其中两个对象具有"title",一个具有"type")而难以反序列化。请编辑您的标题,因为没有整数键;有数字字符串键。类似的问题,不同的描述。
标签: c# json deserialization