2014-03-19 27 views
0

我正在創建一個庫,將JSON對象解碼爲c#對象,然後我們的用戶可以訪問,修改和重新發送。有些對象是預先確定的,其他對象將最終成爲非預定義的(儘管它們確實有幾種標準可能的格式)。因此,我們通過這種方式管理這些值的最佳方式是創建一個包含字典的對象。C#處理值可能(或可能不是)數組的字典

Dictionary<string, Field> _fields = new Dictionary<string,Field>; 

那麼我們所有的對象可以是域,我們爲建立對象和索引/方法來獲得包括非預定的人的任何字段屬性。

public OurObject : Field 

public T GetFieldByName<T>(string fieldName) where T : class 
     { 
      return _fields.ContainsKey(fieldName) ? _fields[fieldName] as T: null; 
     } 

public Field this[string index] 
    { 
     get { return _fields.GetFieldByName<Field>(index); } 
     set { _fields.SetFieldByName(index, value); } 
    } 

好酷。但後來我意識到,其中一些對象實際上是數組。該死的。好吧,回到製圖板。但是,我們遇到了一些問題,找到了處理這些Array/Not Arrays的通用訪問/管理的好方法。

我們拿出這麼遠的想法包括:

  • 創建集合對象,從現場延伸,並把它(FieldCollection),延伸是從陣列的任何字段對象。
  • (可能與先前的點一起)在詞典領域]也許增加一個屬性字段「IsArray的」更改字段

是否有保留,保持單個對象的哈希什麼更好的辦法或以同樣的方式對象數組?這將是一個圖書館,所以我們希望它儘可能簡單的用於用戶。

+0

A有沒有使用現有的JSON解串器的理由? – Polyfun

回答

0

首先,檢查出JSON.Net。它將爲你處理序列化/反序列化原始類型和字典等。它也將處理自定義數據類型。

例如,從文檔(http://james.newtonking.com/json/help/index.html

你期望

public class Account 
{ 
    public string Email { get; set; } 
    public bool Active { get; set; } 
    public DateTime CreatedDate { get; set; } 
    public IList<string> Roles { get; set; } 
} 

數據

string json = @"{ 
'Email': '[email protected]', 
'Active': true, 
'CreatedDate': '2013-01-20T00:00:00Z', 
'Roles': [ 
    'User', 
    'Admin' 
    ] 
}"; 

反序列化和查閱字典,正如你所期望的類型

Account account = JsonConvert.DeserializeObject<Account>(json); 
Console.WriteLine(account.Email); 
相關問題