当我尝试为我的个人对象反序列化 json 字符串时,我得到了 InvalidOperationException。它指出我的 Person 对象不支持反序列化
[DataContract]
public class Person
{
public string FirstName {get;set;}
public string LastName {get; set;}
public int Id {get; set;}
}
json字符串的例子
[{"name":"FirstName","value":"John"},{"name":"LastName","value":"Doe"},{"name":"Id","value":"1001"}]
这是我得到异常的地方
Person p = new JavaScriptSerializer().Deserialize<Person>(json);
我也尝试过 DataContractJsonSerializer,但运气不佳。
这里的问题是 json 字符串是一个 array Persons(人?!?),而不是单个 Person
。
将反序列化更改为
Person[] p = new JavaScriptSerializer().Deserialize<Person[]>(json);
它会起作用。
[编辑 - 回应您的评论]是的 - 这将提供三个 Person 实例, - 事实上,它们都将具有空/零属性。
我怀疑您真的期望这个 json 字符串会为您提供原始代码:
string json = "[{\"FirstName\":\"John\", \"LastName\":\"Doe\",\"Id\":\"1001\"}]";
这是一个人,John Doe,id 为 1001。但是如果反序列化为 Person
,这不是 json 所说的。
你的原始 json 可以被反序列化为一个名称/值对数组,如下所示:
public class NameValuePair
{
public string name;
public string value;
}
使用这个
var p = new JavaScriptSerializer().Deserialize<NameValuePair[]>(json);
希望这段代码能更好地说明 json 和类之间的关系。
我是一名优秀的程序员,十分优秀!