c# - 反序列化包含字典的对象列表

标签 c# .net json serialization

我见过很多例子,这些例子似乎表明我正在做的事情应该有效,但无论出于何种原因,它都没有。我正在尝试反序列化对象集合,其中一个属性是字典,如下所示:

class Program
{
    static void Main(string[] args)
    {
        var json = "{\"Collection\":[{\"ID\":\"1243\",\"Dictionary\":[{\"Key\":\"color\", \"Value\":\"red\"},{\"Key\":\"size\",\"Value\":\"large\"}]},{\"ID\":\"1243\",\"Dictionary\":[{\"Key\":\"color\", \"Value\":\"blue\"},{\"Key\":\"size\",\"Value\":\"small\"}]}]}";
        //var json = "[{\"ID\":\"1243\",\"Dictionary\":[{\"Key\":\"color\", \"Value\":\"red\"},{\"Key\":\"size\",\"Value\":\"large\"}]},{\"ID\":\"1243\",\"Dictionary\":[{\"Key\":\"color\", \"Value\":\"blue\"},{\"Key\":\"size\",\"Value\":\"small\"}]}]";
        List<MyObject> myObjects = new JavaScriptSerializer().Deserialize<List<MyObject>>(json);
    }
}

[DataContract]
public class MyObject
{
    [DataMember]
    public string ID { get; set; }

    [DataMember]
    public Dictionary<string, string> Dictionary { get; set; }
}

第一个 json 字符串将整个对象封装在一个对象中——如果我运行那个对象,它运行良好,但 myObjects 只是一个空列表。如果我运行第二个字符串(没有被包装),我会收到以下错误:

Type 'System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' is not supported for deserialization of an array.

根据我所做的研究,这似乎应该非常简单 - 任何人都知道我应该使用哪种 JSON 格式以及出了什么问题?如果我只执行一个对象而不是一组对象,JSON 反序列化就很好。

最佳答案

是的,如果您有任何复杂的类型和日期,反序列化器不会特别反序列化字典对象。解决方案是使用 Newtonsoft.Json 使用 Jobject 反序列化你可以以此为例并尝试..在你的情况下你可以把它带到 var 或 Jobject

    JArray resources=(JArray)JsonConvert.DeserializeObject(objJson);
                     itemStores = resources.Select(resource => new Resource`enter code here`
                     {
                         SpaceUsed = long.Parse(resource["indexDiskMB"].ToString()),
                         ItemId =resource["id"].ToString(),
                         CountItems =Int32.Parse(resource["numItems"].ToString()),
                         ItemType=resource["type"].ToString()

                     }).ToList();

关于c# - 反序列化包含字典的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12397733/

相关文章:

python - 写入 JSON 时如何不转义反斜杠

javascript - 如何在 JSON 变量永久 JavaScript 数组中进行更改(例如分配新的键和值)?

json - Django 没有发送正确的 json 响应

c# - 获取泛型 List<T> 中 T 的实际类型

c# - 列出 DataGrid 中的目录文件

c# - Azure AD 获取错误的 token 版本

.net - System.Net.WebSockets.ClientWebSocket 的线程安全

c# - 在页面上预览生成的 PDF

c# - 将 Visual Studio 2015 项目转换为 Visual Studio 2017?

c# - ActiveDirectory 目录搜索器 : why is FindOne() slower than FindAll() and why are properties omitted?