2015-05-29 42 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

相關問題