@Senture

Простая десериализация JSON в C# не выходит, почему?

Здравствуйте.

Имею вот такую JSON строку:
{"id":"3","companies_name":"{EQ\r\n"}
{"id":"6","companies_name":"testName Company"}
{"id":"7","companies_name":"testName Company324324"}
{"id":"8","companies_name":"testName Company"}
{"id":"9","companies_name":"testName Companydfgdfgf"}
{"id":"10","companies_name":"testName Company"}
{"id":"13","companies_name":"testName Company"}


Использую Newtonsoft.Json, вот так:
Companies restoredCompanies = JsonConvert.DeserializeObject<Companies>(result.message);


Если JSON приходит с 1 объектом, все ок, если несколько то возникает ошибка:
"Additional text encountered after finished reading JSON content: {. Path '', line 1, position 37."

Я понимаю причину ошибки, то что я несколько элементов пытаюсь записать в 1 объект, но я пытался сделать и вот так:
List<Companies> restoredCompanies = JsonConvert.DeserializeObject<List<Companies>>(result.message);
// и так:

Companies[] restoredCompanies = JsonConvert.DeserializeObject<Companies[]>(result.message);


А вот класс Companies:
class Companies
    {
        public string id { get; set; }
        public string companies_name { get; set; }
    }


Но что то не получается.

Я понимаю что вопрос мега тупой и очень простой, не судите пожалуйста)

P.S. Спасибо всем огромное!
  • Вопрос задан
  • 977 просмотров
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
Имею вот такую JSON строку:

Похоже на невалидный жсон.
Если у вас список, то должно быть
[
  {"id":"3","companies_name":"{EQ\r\n"},
  {"id":"6","companies_name":"testName Company"},
  {"id":"7","companies_name":"testName Company324324"},
  {"id":"8","companies_name":"testName Company"},
  {"id":"9","companies_name":"testName Companydfgdfgf"},
  {"id":"10","companies_name":"testName Company"},
  {"id":"13","companies_name":"testName Company"}
]

Тогда надо будет делать
JsonConvert.Deserialize<Companies[]>(str)
class Company {
  [JsonProperty("id")]
  public string Id { get; set; }

  [JsonProperty("companies_name")]
  public string Name { get; set; }
}

UPD: если это у вас какой-то поток из логов, например, то можно воспользоваться таким подходом: https://stackoverflow.com/questions/48882653/deser...
Но если это не логи, то лучше поправьте формат.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Qualiant
Может кидать ошибку потому что ему не удалось десереализовать именно в указанный класс.

Мне не нравится code-first, да и в целом десереализация в класс. Я парсю json в словарь словарей.

System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
Dictionary<string, object> obj = (Dictionary<string, object>)serializer.DeserializeObject(***json***);
Ответ написан
BasiC2k
@BasiC2k
.NET developer (open to job offers)
Возьмите json строку (наиболее полную) и прогоните через этот сервис: https://www.jsonutils.com/
На выходе у Вас будет класс, который учтёт все особенности.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы