我仍然不完全确定究竟要问什么,所以如果这是错误的设想,请道歉。我发现的其他问题与已经在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; }
}
答案 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();