C# 如何使用c遍历以下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',

我想从以下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.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}]";