2015-05-29 40 views
0

我有一个非常简单的类为什么我不能将DynamicJson转换为我的课,如果我不写{get;设置;}

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); 

我发现,如果我写{获得;设置;}而不是新的List();我可以将json中的值转换为a.intList_a。否则我[0,1]不会进入我的列表。

但是,有时我需要找出a2.intList_a.Count。如果我只是使用{get;设置;},intList将为空。我知道每次打电话给Count时我都可以检查null。但是,如果我可以在初始阶段就更新它,那么会更容易,因为大部分时间我都需要价值。

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

那么,为什么我必须写{get;设置;}使[0,1]进入列表? 是否有无论如何获得这两个功能,我可以让我的列表一个默认的新列表(),而我可以解析他们到我的A?

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

回答

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工作,但它与其他序列化系统一样。

+0

谢谢,这个工程。我不知道是否有一个简短的方法来做到这一点,以便我可以找到/替换他们为我的巨大类。 – h5nc

相关问题