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

标签 c# json model-view-controller

当我尝试为我的个人对象反序列化 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/

相关文章:

java - Gson fromJson 到属性名称未知的 java 类结构

android - JSONObject 的大尺寸 JSON 字符串不起作用

php - 为什么 JSON_ENCODE 不返回 "/"(斜杠) 它总是像这样返回“\/”?

cocoa - delegate 类似于 mvc Controller 吗?

c# - 如何使用链接按钮获取转发器中选择的值?

c# - 'ClosedXML.Excel.XLWorkbook' 的类型初始值设定项抛出异常

c# - 在 mvc 中使用依赖注入(inject)

c# - EntityFramework 在现实生活中如何与 C# 一起使用?

javascript - 如何将模型和 Controller 合并到我的 Node.js 应用程序中?

php - 使用从 Mysql 数据库返回的值填充下拉列表