【问题标题】:How to deserialize JSON to List?如何将 JSON 反序列化为 List?
【发布时间】:2017-02-28 13:33:26
【问题描述】:

我有一个序列化的 JSON 字符串 serializedClaims -

var claims = new List<Claim>();

claims.Add(new Claim("MakerId", "939393", ClaimValueTypes.String));
claims.Add(new Claim(ClaimTypes.DateOfBirth, "1956-03-08", ClaimValueTypes.Date));

var serializedClaims = JsonConvert.SerializeObject(claims); 

现在我想将 serializedClaims 反序列化回 List&lt;Claim&gt;

怎么做?

【问题讨论】:

  • JsonConvert.DeserializeObject&lt;List&lt;Claim&gt;&gt;(serializedClaims); 不起作用吗?
  • 不,它没有,错误“无法找到 System.Security.Claims.Claim 的构造函数”
  • @GilliVilla 您必须将构造函数添加到您的 Claim 类中。
  • 具体来说,你必须添加一个默认构造函数,所以public Claim() {...}。这是因为在幕后,JsonConvert 正在迭代 serializedClaims 中的 JSON 对象,并且对于每个对象,使用默认构造函数创建一个新的 Claim,并使用反射来使用类似命名的条目填充该对象的属性JSON 对象。

标签: c# .net json asp.net-mvc serialization


【解决方案1】:

你可以通过指定List&lt;Claim&gt;类型进行转换

var dserializedClaims = JsonConvert.DeserializeObject<List<Claim>>(serializedClaims); 

【讨论】:

  • 应该是JsonConvert.DeserializeObject&lt;List&lt;Claim&gt;&gt;(...
  • 现在就像 Nihal Rp 的回答一样。
【解决方案2】:

您可以使用 JsonConvert 反序列化对象,您还可以指定其设置为 json data.like 的格式

      var settings = new JsonSerializerSettings
        {
            ContractResolver = new CamelCasePropertyNamesContractResolver(),
            NullValueHandling = NullValueHandling.Ignore,
            DateParseHandling = DateParseHandling.None
        };
       List<Claim> claims =JsonConvert.DeserializeObject<List<Claim>>(serializedClaims, settings);

使用此设置,您可以忽略空值并提供日期解析处理

【讨论】:

    【解决方案3】:

    你可以这样做

    List<Claim> deserializedClaims = JsonConvert.DeserializeObject<List<Claim>>(serializedClaims);
    

    【讨论】:

    • 没有。出错了。
    猜你喜欢
    • 2018-10-06
    • 1970-01-01
    • 2021-06-14
    • 2015-06-07
    • 2017-01-15
    • 2014-02-08
    • 1970-01-01
    • 2021-01-14
    • 2018-01-09
    相关资源
    最近更新 更多