【问题标题】:Deserializing a json string to an object array and then cast it to Dictionary?将json字符串反序列化为对象数组,然后将其转换为字典?
【发布时间】:2015-05-06 13:10:25
【问题描述】:

这是json字符串

[{"ProductIdentifier":"{test:'some data'}","validationCompleted":0}]

我正在尝试将一个对象反序列化为一个可以正常工作的对象数组,但是当我尝试将它转换回字典时,我遇到了一个异常,任何人都可以帮助我,谢谢。

    m_receiptsList is an object[] 
 m_receiptsList = JsonConvert.DeserializeObject<object[]>(pastJsonString,
                                                        new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All});
  for(int i=0; i<m_receiptsList.Length; i++)
{
    Dictionary<string, object> receiptItem = (Dictionary<string, object>)m_receiptsList[i]; 
 bool breceipt = receiptItem["validationCompleted"].Equals(0);
}

// 执行此操作时出现异常不能将对象 m_receiptList[i] 转换为字典。

【问题讨论】:

  • 那么m_receiptList[i]的运行时类型是什么?
  • 一般的想法是你自己写一个类,它的属性对应于 JSON 数据的格式。然后,您将特定于序列化的属性添加到类和属性中,并使用该属性来反序列化 JSON 消息。 JsonConvert.DeserializeObject&lt;MyNiftyClass&gt;(...).
  • Dictionary 将在哪里获取 Key 的字符串?您不能将数组转换为字典,它们是完全不同的东西。你也许可以把它变成List&lt;object&gt;,但不能变成字典。
  • @user2225104 嗨,是的,我可以写,但服务器数据可能会不时更改,所以如果我有 system.object,那么只要有来自服务器的更新,我就不必管理类。
  • @bali182 它是一个system.object,它有一个字符串和jtoken的字典。

标签: c# json dictionary json.net


【解决方案1】:

如果您希望 Json.NET 将您的 JSON 反序列化为字典数组,您需要告诉它这样做:

        object[] m_receiptsList;
        m_receiptsList = JsonConvert.DeserializeObject<Dictionary<string, object>[]>(pastJsonString, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All });

顺便说一句,设置 TypeNameHandling = TypeNameHandling.All 不会帮助您,因为您的 JSON 样本没有类型信息。如果是这样,您的对象的开头将有一个属性"$type"。

此外,除非另有说明,否则 JSON.Net 会将 JSON 整数转换为 long,因此您需要这样做:

        foreach (IDictionary<string, object> dict in m_receiptsList)
        {
            bool breceipt = dict["validationCompleted"].Equals((long)0);
        }

【讨论】:

  • 是的,我确实做到了,非常感谢你的回答:)
猜你喜欢
  • 2021-06-12
  • 2017-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多