【发布时间】:2018-06-29 22:38:43
【问题描述】:
我有一个如下所示的 JSON 文件:
{
"foo": "bar",
"pets": {
"dog": {
"name": "spot",
"age": "3"
},
"cat": {
"name": "wendy",
"age": "2"
}
}
}
我想将其反序列化为 C# 类:
public class PetObject
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("age")]
public string Age { get; set; }
}
public class FooObject
{
[JsonProperty("foo")]
public string Foo { get; set; }
[JsonProperty("pets")]
public List<PetObject> Pets { get; set; }
}
使用类似这样的代码进行转换是行不通的,因为 pets 里面有多个对象,而且不是 JSON 数组。
//does not work
FooObject content = JsonConvert.DeserializeObject<FooObject>(json);
这里是例外:
Newtonsoft.Json.JsonSerializationException
HResult=0x80131500
Message=Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[Test.PetObject]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.
To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List<T>) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.
Path 'pets.dog', line 4, position 10.
有没有办法将 pets 对象中的对象转换为对象数组? (除了在传递给 DeserializeObject 方法之前编辑 JSON 本身)
【问题讨论】:
-
您必须考虑
"dog"和"cat"应该在您的数据结构中。我在您的 json 中看不到任何适合这些标签的属性。除此之外,“它不起作用”并不是一个好的问题描述。相反,请包括您得到的确切错误(如果有),或结果连同您的预期。 -
您的
pets属性根本不是List,更像是Dictionary<string, PetObject>。此外,该属性称为pets和 notPetObjects,就像在您的班级中一样。 -
@HimBromBeere 抱歉,对这个平台还是有点陌生,我稍微澄清了帖子并添加了实际错误。
标签: c# json json.net json-deserialization