簡體   English   中英

C#處理值可以(或不可以)為數組的字典

[英]C# Dealing with dictionaries where values MAY (or may not) be arrays

我正在創建一個庫,該庫將JSON對象解碼為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); }
    }

好的。 但是后來我意識到其中一些對象實際上是數組。 該死的。 好的,回到繪圖板。 但是我們很難找到一種很好的方法來處理這些數組/非數組的通用訪問/管理。

到目前為止,我們提出的想法包括:

  • 創建一個從字段擴展的集合對象,並將其放置在(FieldCollection)中,並擴展從該數組擴展為數組的所有字段對象。
  • 將字典中的Field更改為Field []並可能向“ IsArray”字段添加一個屬性(可能與上一點結合使用)

有沒有更好的方法來保持散列,使單個對象或對象數組保持相同的哈希值? 這將是一個庫,因此我們希望它對用戶來說盡可能地易於使用。

首先,檢查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': 'james@example.com',
'Active': true,
'CreatedDate': '2013-01-20T00:00:00Z',
'Roles': [
    'User',
    'Admin'
    ]
}";

如您所願,反序列化並訪問字典

Account account = JsonConvert.DeserializeObject<Account>(json);
Console.WriteLine(account.Email);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM