具有一些修复属性和一些动态属性序列化的对象

时间:2015-08-08 04:10:53

标签: c# json.net

我有一个包含一些固定属性的类,并且我还必须支持在运行时决定的动态属性。

我的问题是我想将该类序列化为json,因此我决定继承Dictionary

public class TestClass : Dictionary<string,object>
{        
    public string StudentName { get; set; }
    public string StudentCity { get; set; }            
}

我正在使用它:

static void Main(string[] args)
{
    TestClass test = new TestClass();
    test.StudentCity = "World";
    test.StudentName = "Hello";
    test.Add("OtherProp", "Value1");
    string data = JsonConvert.SerializeObject(test);
    Console.WriteLine(data);
    Console.ReadLine();
}

我的输出是这样的:

{"OtherProp":"Value1"}

但我期待这个:

{"OtherProp":"Value1", "StudentName":"Hello" , "StudentCity":"World"}

如您所见,它没有序列化StudentNameStudentCity

我知道一个解决方案是使用Reflection将Fix属性添加到字典中或者使用Json.net它自己的JObject.FromObject但是为了做到这一点,我必须进行操作。

我还尝试使用TestClass属性修饰JObject,但它不会产生所需的输出。

我不想为此编写自定义转换器,因为这是我的最后选择。

任何帮助或建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

你可以像这样实现你的课程

public class TestClass : Dictionary<string, object>
{
    public string StudentName
    {
        get { return this["StudentName"] as string; }
        set { this["StudentName"] = value; }
    }

    public string StudentCity
    {
        get { return this["StudentCity"] as string; }
        set { this["StudentCity"] = value; }
    }
}

这样那些固定属性实际上就像帮助者一样方便访问。 请注意我在字典中设置值的方式。这样,如果密钥不存在,它将被创建,并且值将分配给该密钥,否则该值将被更新。