JsonConvert.DeserializeObject не работает в моем веб-приложении .NET Core - PullRequest
0 голосов
/ 05 ноября 2019

В настоящее время я занимаюсь разработкой приложения .NET Core с версией 2.2. Я получаю XML-ответ от Web API, который я не могу изменить. Я выгляжу так:

<?xml version="1.0" encoding="UTF-8"?><GetInformation>
<d1>PL11VTMICE</d1>
<d2>PL-BL02912</d2>
<d3>BL</d3>
<d4>0</d4>
<d5>MTR</d5>
<d6>405</d6>
<d7/>
<d8/>
<d9/>
<d10>2019-10-15 13:29:07.000</d10>

У меня есть класс модели, который выглядит так:

public class Data
{
    [Required]
    public string d1 { get; set; }
    public string d2 { get; set; }
    public string d3 { get; set; }
    public string d4 { get; set; }
    public string d5 { get; set; }
    public string d6 { get; set; }
    public string d7 { get; set; }
    public string d8 { get; set; }
    public string d9 { get; set; }
    public string d10 { get; set; }
}
public class Informations
{
    public List<Data> GetInformation { get; set; }
}

Преобразование из XML в JSON прекрасно работает с этим:

XmlDocument doc = new XmlDocument();
var res = await client.GetAsync("some_address");
            if (res.IsSuccessStatusCode)
            {
                var result = res.Content.ReadAsStringAsync().Result;
                doc.LoadXml(result);

                string jsontest = JsonConvert.SerializeXmlNode(doc);
            }

Когда я смотрю на мою переменную "jsontest" во время выполнения, она выглядит так: Visual Studio tester

И когда я пытаюсь десериализовать его в объект:

Informations bob = JsonConvert.DeserializeObject<Informations>(jsontest);

я получаю следующую ошибку:

  • ex {Newtonsoft.Json.JsonSerializationException: Невозможно десериализоватьтекущий объект JSON (например, {"name": "value"}) в тип 'System.Collections.Generic.List`1 [xxx.xxx.Data]', поскольку для типа требуется массив JSON (например, [1,2,3]) правильно десериализовать. Чтобы исправить эту ошибку, либо измените JSON на массив JSON (например, [1,2,3]), либо измените десериализованный тип так, чтобы это был нормальный тип .NET (например, не примитивный тип, например, целое число, а не тип коллекции, например,массив или список), которые можно десериализовать из объекта JSON. JsonObjectAttribute также можно добавить к типу, чтобы принудительно десериализовать его из объекта JSON.

Я уже пробовал многие решения в Интернете, например, с помощью тега JsonProperty: JSONНедвижимость но, к сожалению, без разницы. Надеюсь, вы можете мне помочь.

Заранее спасибо.

1 Ответ

1 голос
/ 05 ноября 2019

Проблема в том, что GetInformation - это не список в вашем JSON;это отдельный объект.

Чтобы исправить, измените эту строку в вашем Informations классе:

public List<Data> GetInformation { get; set; }

на следующее:

public Data GetInformation { get; set; }

Fiddle: https://dotnetfiddle.net/wUPNfq

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...