【问题标题】:deserialize complex object in C#在 C# 中反序列化复杂对象
【发布时间】:2021-09-23 07:53:34
【问题描述】:

我有一个无法反序列化的 JSON 对象。它失败并出现以下错误:

Newtonsoft.Json.JsonSerializationException: '无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List1[SampleObj]',因为该类型需要 JSON 数组。

JSON:

"{\"rows\":
     [
      {\"ID\":1,
       \"Name\":\"Puz\"
      },
       
      {\"ID\":2,
        \"Name\":\"Kez\"
      }
        
    ]
}"

我已尝试使用 Newtonsoft 进行跟踪:

var deserializeObject = JsonConvert.DeserializeObject<List<SampleObj>>(jsonString);

下面的尝试是使用 JavaScriptSerializer。

JavaScriptSerializer oJS = new JavaScriptSerializer();
List<SampleObj> deserializeObject = new List<ReportColumns>();
deserializeObject = oJS.Deserialize<List<ReportColumns>>(jsonString);

但两者都报错。

【问题讨论】:

  • “我遇到了一个错误” - 你能包括那个错误 ....吗?以及你的SampleObj-class 是什么样的?
  • 第一种方法我得到Newtonsoft.Json.JsonSerializationException: 'Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List1[SampleObj]' 因为类型需要 JSON 数组`这个错误
  • 包含您尝试反序列化到的类定义

标签: c# json asp.net-mvc-4 model-view-controller


【解决方案1】:

您的反序列化类似乎与提供的 JSON 结构不匹配。像这样的东西应该适合你:

public class Foo
{
  public List<Bar> rows { get; set; }
}

public class Bar
{
  public int ID { get; set; }
  public string Name { get; set; }
}

Foo deserializeObject = oJS.Deserialize<Foo>(jsonString);

【讨论】:

    【解决方案2】:

    Newtonsoft 可以使用以下命令安装:

    PM>Install-Package Newtonsoft.Json -Version 13.0.1
    

    示例用法:

    string json = @"{
      'Email': 'james@example.com',
      'Active': true,
      'CreatedDate': '2013-01-20T00:00:00Z',
      'Roles': [
        'User',
        'Admin'
      ]
    }";
    
    Account account = JsonConvert.DeserializeObject<Account>(json);
    
    Console.WriteLine(account.Email);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多