Как перебрать следующий JSON с помощью C # - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу получить все результаты из нижеприведенного 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 голосов
/ 27 сентября 2018

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 (тип 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 атрибут, тогда вы можете выбрать CamelCasePropertyNamesContractResolver, как предложено @Fram.

0 голосов
/ 27 сентября 2018

Если вы заботитесь о соблюдении стандартов именования свойств .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}]";
0 голосов
/ 27 сентября 2018

Если вы исправите свой Json - эти элементы должны быть в массиве (т.е. заключены в квадратные скобки).

Если у вас есть этот класс:

public class Data 
{
    public int EventId { get; set; }
    public string Name { get; set; }
    public bool? Status { get; set; }
} 

Вы можете десериализовать вашJson использует Json.Net :

var data = JsonConvert.DeserializeObject<IEnumerable<Data>>(json);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...