Member 11415004 Ответов: 1

Контракт данных C# без корневого объекта


У меня есть такой вывод json, и я не могу найти корневой объект.

[

{
"Id": 954,
"FilmId": "ST00000026",
"Название": "Нынешняя Война",
"ScreenId": 2,
"PreShowStartTime": "2018-01-25T11:00:00",
},
{
"Id": 955,
"FilmId": "ST00000026",
"Название": "Нынешняя Война",
"ScreenId": 2,
"PreShowStartTime": "2018-01-25T13:10:00",
}
]

Поэтому попробуйте преобразовать json в c# через DataContract, используя это

[DataContract]

открытый класс RewardRequest1 : JsonDataContractObject
{
[DataMember(Name = "Id")]
public string Id { get; set; }

[DataMember(Name = "FilmId")]
публичная строка FilmId { get; set; }
}

Он возвращает нулевое значение, и я не могу найти корневой объект.

Что я уже пробовал:

Я пыталась дозвониться до Арри, но не смогла достать список. Пожалуйста, помогите мне исправить это.

F-ES Sitecore

В этом JSON нет корневого объекта, это массив из двух объектов, поэтому он является IEnumerable<rewardrequest1> В терминах .net.

Karthik_Mahalingam

вы можете отправить код.

Member 11415004

Привет вот мой метод десериализации:

[DataContract]
публичный класс JsonDataContractObject
{
общественного строка метода toJSON()
{
DataContractJsonSerializer ser = новый DataContractJsonSerializer(this.метод GetType());
Поток = новый потоке MemoryStream();
серийный.Методов writeobject(с);
С. Позиция = 0;
StreamReader sr = новый StreamReader(ы);
возвращение старшего.ReadToEnd();
}
}

И я получаю данные из веб-api с помощью http-клиента. Если у меня есть корневой объект, то этот метод "DataContractJsonSerializer" работает нормально, но мой ответ json не имеет корневого объекта, поэтому идея. Пожалуйста помочь.

1 Ответов

Рейтинг:
2

David_Wimbley

Ваш JSON не имеет корневого объекта, вы просто создаете массив из 2 объектов-это все.

Если бы вы изменили свой JSON на

{  
   "Items":[  
      {  
         "Id":954,
         "FilmId":"ST00000026",
         "Title":"The Current War",
         "ScreenId":2,
         "PreShowStartTime":"2018-01-25T11:00:00"
      },
      {  
         "Id":955,
         "FilmId":"ST00000026",
         "Title":"The Current War",
         "ScreenId":2,
         "PreShowStartTime":"2018-01-25T13:10:00"
      }
   ]
}


Тогда вашим корневым объектом будут "элементы", а структура вашего класса будет выглядеть следующим образом

public class Item
{
    public int Id { get; set; }
    public string FilmId { get; set; }
    public string Title { get; set; }
    public int ScreenId { get; set; }
    public DateTime PreShowStartTime { get; set; }
}

public class RootObject
{
    public List<Item> Items { get; set; }
}


Где вы могли бы тогда, используя json.net библиотека, сделайте что-нибудь вроде

var mydata = JsonConvert.DeserializeObject<RootObject>(myjsonstring>();


Но пока вы не измените свой JSON, который вы предоставили, у вас нет корневого объекта.


Member 11415004

Привет, спасибо за информацию. Но результат json из веб-api, поэтому я не могу изменить. Вы можете помочь это исправить? и я использую DataContractJsonSerializer. Мой код:

[DataContract]
публичный класс JsonDataContractObject
{
общественного строка метода toJSON()
{
DataContractJsonSerializer ser = новый DataContractJsonSerializer(this.метод GetType());
Поток = новый потоке MemoryStream();
серийный.Методов writeobject(с);
С. Позиция = 0;
StreamReader sr = новый StreamReader(ы);
возвращение старшего.ReadToEnd();
}
}