C# 如何使用c遍历以下json
我想从以下json中获得所有结果:C# 如何使用c遍历以下json,c#,json,asp.net-web-api,C#,Json,Asp.net Web Api,我想从以下json中获得所有结果: [ { eventID: 1, name: 'Wedding', status: true }, { eventID: 2, name: 'Baptism', status: true }, { eventID: 3, name: 'Tour', status: true }, { eventID: 4, name: 'Birthday',
[
{
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.Parsejson进行解析;但是有一个错误。我的代码仅在JSON中有一组值时有效。有人能帮忙吗?假设您修复了Json,那么这些元素需要放在一个数组中,即用方括号括起来 如果你有这门课:
public class Data
{
public int EventId { get; set; }
public string Name { get; set; }
public bool? Status { get; set; }
}
您可以使用以下命令反序列化Json:
这里提供的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; }
}
因此ConvertedResult的var responsetype将包含一个JsonConvertSampleClass类型的列表,其中包含3项
注意:不要忘记包括使用Newtonsoft.Json
问题在答案发布后编辑,因此,已编辑问题的答案:
旁注:如果您不想使用JsonProperty属性,则可以按照@Fram的建议使用CamelCasePropertyNamesContractResolver。如果您关心遵守.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()});
var _deserializedObject = JsonConvert.DeserializeObject<DeserializedObject[]>(Data);
并使用
var _deserializedObject = JsonConvert.DeserializeObject<DeserializedObject[]>(Data, new JsonSerializerSettings {ContractResolver = new CamelCasePropertyNamesContractResolver()});
var _deserializedObject = JsonConvert.DeserializeObject<DeserializedObject[]>(Data);
这是无效的JSONConvert,将其转换为list,然后您可以简单地使用ForEachResult=JSONConvert.DeserializeObjectjson的可能重复项进行迭代;这里T是您的对象类型您的JSON是一个数组,而不是一个对象,因此请改用JArray.Parsejson。用户不需要所有这些JsonProperty属性。只需将JsonSerializerSettings ContractResolver更改为Camel Case解析器,它就可以工作了。它们也不需要更改JSON字符串。将其反序列化为任何类型的数组define@Fran这是一种选择,仅此而已。这个解决方案有什么问题吗?为什么投反对票?你没有回答OP的问题,因为你改变了他的json,因为它是有效的。然后继续向每个属性添加JsonProperty属性,当简单地交换契约解析器时,它将实现OP想要的。@Fran问题似乎在那里被编辑,当我回答问题时,Json无效且不正确,这就是为什么我使用提问者提供的输入创建Json。请检查问题中的评论。稍后,提问者编辑了我猜的问题,现在只有我注意到了。@Fran你还认为我的答案需要投反对票吗?
private class DeserializedObject
{
public int eventID { get; set; }
public string name { get; set; }
public bool? status { get; set; }
}
var _deserializedObject = JsonConvert.DeserializeObject<DeserializedObject[]>(Data);
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}]";