2009-07-24 40 views
4

我有一个类,目前继承从词典,然后添加一些第一类成员属性。大致为:JSON序列化与类继承从字典<T,V>

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

在然而此序列化对象的实例来JSON,看来串行只发射出我已经存储了词典中的关键字/值对。即使我将DataMember属性应用于新的1st类属性,JSON序列化程序似乎也不知道如何处理这些属性,而只是忽略它们。

我假设有一些基本的基本知识,我错过了,但通过代码示例和文档在.net的JSON序列化程序中搜索,我只发现了不符合我所做的简单示例。我们从其他基类派生出来的所有其他类似乎都没有表现出这个问题,它是从泛型字典中派生出来的,特别是给了我们适合的东西。

[编辑] 将字典移动到Foo作为第一类属性的缺点,是否有反正做这项工作?我假设挂断是序列化程序不知道如何“命名”字典以区别于其他成员?

+0

可能的重复[如何将字典转换为C#中的JSON字符串?](http://stackoverflow.com/questions/5597349/how-do-i-convert-a-dictionary-toa-a- json-string-in-c) – 2014-03-07 16:39:42

回答

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"}]}

这会帮助您解决问题的解决方法吗?

+0

安德鲁你打我打了,我正在编辑我的原始文件,因为你张贴..我希望不必改变Foo类,因为它是一个遗留件,并触及一吨,但是如果我不能在电线上连续播放这个东西,我的手可能会被迫。 – bakasan 2009-07-24 20:10:25