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"添加属性(可能与前一点结合)
是否有更好的方法来保持哈希,使单个对象或对象数组保持相同的方式?这将是一个库,所以我们希望它是尽可能简单地为用户使用。
首先,查看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);