gpt4 book ai didi

c# - 如何让对象支持反序列化?

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

当我尝试为我的个人对象反序列化 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 和类之间的关系。

关于c# - 如何让对象支持反序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9211098/

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