将JSON对象反序列化为数组或列表

时间:2017-09-28 12:25:49

标签: c# arrays json deserialization

我仍然不完全确定究竟要问什么,所以如果这是错误的设想,请道歉。我发现的其他问题与已经在JSON中接收对象数组的人有关。

我的JSON字符串作为对象从第三方返回,当我只处理它作为一个数组返回时,它很容易转换为过去的对象。

var success = JsonConvert.DeserializeObject<RootObjectClass>(result); gives me a `Cannot deserialize the current JSON object (e.g. {\"name\":\"value\"}) into type 'System.Collections.Generic.List`

我应该将它转换为数组,如果是这样,如何将对象单独命名为与属性相同的&#34; contact_id&#34;值?

否则,有人可以指出我如何从这个JSON中获取联系人列表的最佳实践方向。

JSON结构如下所示。

{
    "status": true,
    "error_code": "",
    "error_message": "",
    "data": {
        "693": { // Contact obj, always the same as contact_id
            "contact_id": "693",
            // removed lots of properties for brevity
            "real_name": "Mike Hunt",
            "telephone": "01280845867",
            "email": "mhunt@test.com"
        },
        "767": { 
            "contact_id": "767",
            "real_name": "Peter File",
            "telephone": "02580845866",
            "email": "pfile@test.com"
        }
    }
}

班级结构

[Serializable()]
[DataContract]
public class RootObjectClass
{
    [DataMember()]
    public bool status { get; set; }
    [DataMember()]
    public string error_code { get; set; }
    [DataMember()]
    public string error_message { get; set; }
    [DataMember()]
    public DataClass data { get; set; }
}
[Serializable()]
[DataContract]
public class DataClass
{
    [DataMember]
    public Contact contact { get; set; }
}

1 个答案:

答案 0 :(得分:2)

您可以将data属性反序列化为dictionary

[Serializable()]
[DataContract]
public class RootObjectClass
{
    [DataMember()]
    public bool status { get; set; }
    [DataMember()]
    public string error_code { get; set; }
    [DataMember()]
    public string error_message { get; set; }
    [DataMember()]
    public Dictionary<string,Contact> data { get; set; }
}

然后你可以选择这样的联系人:

var contacts = rootObject.data.Values.ToList();