c#处理字典,其中的值可以是(也可以不是)数组

本文关键字:也可以 数组 字典 处理 | 更新日期: 2023-09-27 17:51:00

我正在创建一个库,它可以将JSON对象解码为c#对象,然后我们的用户可以访问,修改和重新发送。一些对象是预先确定的,而另一些对象最终将是非预先确定的(尽管它们确实有几种可能的标准格式)。因此,我们发现用this来管理这些值的最佳方法是创建一个包含字典的对象。

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)中,从该字段扩展任何作为数组的字段对象。
  • 将字典中的字段更改为字段[],并可能为字段"IsArray"添加属性(可能与前一点结合)

是否有更好的方法来保持哈希,使单个对象或对象数组保持相同的方式?这将是一个库,所以我们希望它是尽可能简单地为用户使用。

c#处理字典,其中的值可以是(也可以不是)数组

首先,查看JSON.Net。它将为你处理序列化/反序列化基本类型和字典等。它还将处理自定义数据类型。

E。G,从文档(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);