继承自Dictionary <t,v> </t,v>的类的JSON序列化

时间:2009-07-24 19:59:32

标签: c# json dictionary serialization

我有一个当前继承自Dictionary的类,然后为它添加一些第一类成员属性。大致是:

public class Foo : Dictionary<string, string>
{
   public string Bar { get; set; }
   public string Baz { get; set; }
}

在将此对象的实例序列化为JSON时,似乎序列化程序仅发出我在Dictionary中存储的键/值对。即使我将DataMember属性应用于新的第1类属性,JSON序列化程序似乎也不知道如何处理这些属性,而只是忽略它们。

我假设我缺少一些基本上基本的东西,但是通过.net的JSON序列化器上的代码示例和文档搜索,我只发现了与我正在做的不完全匹配的琐碎示例。我们从其他一些基类派生的所有其他类似乎都没有出现这个问题,特别是那些从通用字典派生出来的类似于我们的问题。

[编辑] 如果没有将字典移动到Foo作为头等舱房产,那么无论如何都要做到这一点吗?我假设挂断的是序列化程序不知道要用什么“命名”字典以区别于其他成员?

1 个答案:

答案 0 :(得分:3)

在这种情况下,或许基于组合的解决方案会更好:

using System;
using System.Collections.Generic;
using System.Runtime.Serialization.Json;
using System.IO;
using System.Text;

class Program
{
    static void Main()
    {
        Foo foo = new Foo { Bar = "bar", Baz = "baz" };
        foo.Items.Add("first", "first");

        DataContractJsonSerializer serializer 
            = new DataContractJsonSerializer(typeof(Foo));

        using (MemoryStream ms = new MemoryStream())
        {
            serializer.WriteObject(ms, foo);
            Console.WriteLine(Encoding.Default.GetString(ms.ToArray()));
        }
    }
}

public class Foo
{
    public Dictionary<string, string> Items { get; set; }
    public string Bar { get; set; }
    public string Baz { get; set; }

    public Foo()
    {
        this.Items = new Dictionary<string, string>();
    }
}

生成此输出:

  

{"Bar":"bar","Baz":"baz","Items":[{"Key":"first","Value":"first"}]}

这会解决您的问题作为解决方法吗?