我有一个包含一些固定属性的类,并且我还必须支持在运行时决定的动态属性。
我的问题是我想将该类序列化为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"}
如您所见,它没有序列化StudentName
和StudentCity
。
我知道一个解决方案是使用Reflection将Fix属性添加到字典中或者使用Json.net它自己的JObject.FromObject但是为了做到这一点,我必须进行操作。
我还尝试使用TestClass
属性修饰JObject
,但它不会产生所需的输出。
我不想为此编写自定义转换器,因为这是我的最后选择。
任何帮助或建议都将受到高度赞赏。
答案 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; }
}
}
这样那些固定属性实际上就像帮助者一样方便访问。 请注意我在字典中设置值的方式。这样,如果密钥不存在,它将被创建,并且值将分配给该密钥,否则该值将被更新。