我想从下面的json中获取所有结果:
[
{
eventID: 1,
name: 'Wedding',
status: true
},
{
eventID: 2,
name: 'Baptism',
status: true
},
{
eventID: 3,
name: 'Tour',
status: true
},
{
eventID: 4,
name: 'Birthday',
status: null
}
]
我尝试使用var jObject = JObject.Parse(json);
进行解析,但出现错误。仅当JSON中包含一组值时,我的代码才有效。谁能帮忙吗?
答案 0 :(得分:0)
假设您修复了Json,这些元素需要放在一个数组中(即用方括号括起来)。
鉴于您拥有此类:
public class Data
{
public int EventId { get; set; }
public string Name { get; set; }
public bool? Status { get; set; }
}
您可以使用Json.Net反序列化Json:
var data = JsonConvert.DeserializeObject<IEnumerable<Data>>(json);
答案 1 :(得分:0)
如果您希望遵守.net属性命名标准,则可以为对象定义类型
private class DeserializedObject
{
public int EventId { get; set; }
public string Name { get; set; }
public bool? Status { get; set; }
}
然后使用Json.net,您可以使用
将其反序列化var _deserializedObject = JsonConvert.DeserializeObject<DeserializedObject[]>(Data, new JsonSerializerSettings {ContractResolver = new CamelCasePropertyNamesContractResolver()});
如果您不遵循.net约定,
private class DeserializedObject
{
public int eventID { get; set; }
public string name { get; set; }
public bool? status { get; set; }
}
并使用
反序列化var _deserializedObject = JsonConvert.DeserializeObject<DeserializedObject[]>(Data);
您的json定义为
private const string Data = "[{eventID: 1,name: 'Wedding',status: true},{eventID: 2,name: 'Baptism',status: true},{ eventID: 3,name: 'Tour',status: true},{eventID: 4,name: 'Birthday',status: null}]";
答案 2 :(得分:-1)
您在此处提供的Json无效,因此我假设您有一个像下面这样的json
string jsonString = "{'data':[{'eventID':1,'name': 'Wedding','status': true},{'eventID':2,'name': 'Baptism','status': true},{'eventID':2,'name': 'Birthday','status': null}]}".Replace("'", "\"");
然后,您必须创建一个合适的模型来保存数据。
public class ConvertedResult
{
[JsonProperty(PropertyName = "data")]
public IEnumerable<JsonConvertSampleClass> ResultList { get; set; }
}
public class JsonConvertSampleClass
{
[JsonProperty(PropertyName = "eventID")]
public int EventId { get; set; }
[JsonProperty(PropertyName = "name")]
public string Name { get; set; }
[JsonProperty(PropertyName = "status")]
public bool? Status { get; set; }
}
然后最后Deserialize
您的Object
var response = Newtonsoft.Json.JsonConvert.DeserializeObject<ConvertedResult>(jsonString);
因此var response(类型ConvertedResult
)将包含类型JsonConvertSampleClass
的列表,其中包含3个项目。
注意:不要忘记包含using Newtonsoft.Json;
在答案发布后对问题进行了编辑,因此,对已编辑问题的答案:
string jsonString = "[{'eventID':1,'name': 'Wedding','status': true},{'eventID':2,'name': 'Baptism','status': true},{'eventID':2,'name': 'Birthday','status': null}]".Replace("'", "\"");
var response = Newtonsoft.Json.JsonConvert.DeserializeObject<IEnumerable<JsonConvertSampleClass>>(jsonString);
旁注:如果您不想使用JsonProperty
属性,则可以按照@Fram的建议使用CamelCasePropertyNamesContractResolver
。