我有一个当前继承自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作为头等舱房产,那么无论如何都要做到这一点吗?我假设挂断的是序列化程序不知道要用什么“命名”字典以区别于其他成员?
答案 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"}]}
这会解决您的问题作为解决方法吗?