如果我不写,我为什么不能将DynamicJson转换成我的班级?组;}

时间:2015-05-29 11:13:34

标签: c# json

我有一个非常简单的课程

public class A
{
    public List<int> intList_a = new List<int>(); // {get; set;}
}

我有

        A a = DynamicJson.Parse("{\"intList_a\":[0, 1]}");
        A a2 = DynamicJson.Parse("{\"a\":{}}");
        Console.WriteLine(a.intList_a.First());
        Console.WriteLine(a2.intList_a.Count);

我发现如果我写{get; set;}而不是new List();我可以将json中的值转换为a.intList_a。否则我[0,1]不会进入我的名单。

但是,有时我需要找出a2.intList_a.Count。如果我只是使用{get; set;},intList将为null。我知道每次调用Count都可以检查null。但是如果我能在初始化时更容易,因为大部分时间我都需要这个值。

我也明白我的C#6.0让它更容易,但我的工作环境不允许我升级。

为什么我要写{get;设置;}使[0,1]进入列表? 无论如何都有这两个功能,我可以让我的List一个默认的新List(),而我可以将它们解析为我的A?

我可以在构造函数中编写新内容,但我的数据类太大而无法手工完成。

1 个答案:

答案 0 :(得分:0)

C#中的字段和属性之间存在差异。

Int32 thisIsAField = 0;
Int32 ThisIsAProperty { get; set; }

动态对象可以具有在运行时创建/发现的其他属性,但不包含字段。 DynamicJson在内部使用C#的dynamic功能。

但你可以轻松地将两者混合在一起:

private IList<Int32> _intList = new List<Int32>();
public IList<Int32> IntList
{
    get { return this.intList; }
    set { this.intList = value; }
}

我不知道这是否适用于DynamicJson,但它适用于其他序列化系统。