Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C处理字典,其中值可以是(也可以不是)数组_C#_Arrays_Object_Dictionary_Collections - Fatal编程技术网

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

C# C处理字典,其中值可以是(也可以不是)数组,c#,arrays,object,dictionary,collections,C#,Arrays,Object,Dictionary,Collections,我正在创建一个库,将JSON对象解码为c对象,然后用户可以访问、修改和重新发送。有些对象是预先确定的,而另一些对象最终将是非预先确定的,尽管它们有几种可能的标准格式。因此,我们发现用它管理这些值的最佳方法是创建一个包含字典的对象 Dictionary<string, Field> _fields = new Dictionary<string,Field>; 然后我们的所有对象都可以是字段,我们为已建立的对象创建属性,并使用索引器/方法来获取任何字段,包括非预定的字段

我正在创建一个库,将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中,扩展从该字段扩展为数组的任何字段对象。 将字典中的字段更改为字段[],或者将属性添加到字段IsArray,或者与上一点结合使用 有没有更好的方法来保持散列,使单个对象或对象数组保持相同的方式?这将是一个库,所以我们希望它对用户来说尽可能简单易用

首先,检查一下。它将为您处理序列化/反序列化基本类型和字典等。它还将处理自定义数据类型

例如,从文档中

你期望的类型

public class Account
{
    public string Email { get; set; }
    public bool Active { get; set; }
    public DateTime CreatedDate { get; set; }
    public IList<string> Roles { get; set; }
}
如您所料,反序列化并访问字典

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

有没有理由不使用现有的JSON反序列化程序?
Account account = JsonConvert.DeserializeObject<Account>(json);
Console.WriteLine(account.Email);