如何使用C#遍历以下json

时间:2018-09-27 09:56:19

标签: 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',
    status: null
  }
]

我尝试使用var jObject = JObject.Parse(json);进行解析,但出现错误。仅当JSON中包含一组值时,我的代码才有效。谁能帮忙吗?

3 个答案:

答案 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