У меня есть такой JSON
{
"Application": [
{
"Office": "London",
"LogPath": [
"\\\\server1\filepath\\"
]
},
{
"Office": "Paris",
"LogPath": [
"\\\\server2\\logpath1\\",
"\\\\server2\\logpath2\\"
]
}
],
"MailSettings": {
"MailTo": "[email protected]",
"MailSubject" : "Log Checker"
}
}
и я создал собственный класс для чтения содержимого json:
public class RootObject
{
public Application Application { get; set; }
public MailSettings MailSettings { get; set; }
}
public class Application
{
public List<Offices> Offices { get; set; }
}
public class Offices
{
public string Office{ get; set; }
public IList<string> LogPath { get; set; }
}
public class MailSettings
{
public string MailTo { get; set; }
public string MailSubject { get; set; }
}
Но когда я пытаюсь десериализовать json с помощью
RootObject rootObject = JsonConvert.DeserializeObject<RootObject>(json);
Возвращаю ошибку: типу требуется объект JSON (например, {"name": "value"}) для правильной десериализации.
Что не так с моим пользовательским классом?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваши пользовательские классы должны быть такими же.
public class Application
{
public string Office { get; set; }
public List<string> LogPath { get; set; }
}
public class MailSettings
{
public string MailTo { get; set; }
public string MailSubject { get; set; }
}
public class RootObject
{
public List<Application> Application { get; set; }
public MailSettings MailSettings { get; set; }
}
Вы можете генерировать типы с помощью json2csharp - чтобы не создавать вручную представление объекта JSON.
public class RootObject
{
public List<Application> Application { get; set; }
public MailSettings MailSettings { get; set; }
}
public class Application
{
public string Office { get; set; }
public List<string> LogPath { get; set; }
}
public class MailSettings
{
public string MailTo { get; set; }
public string MailSubject { get; set; }
}
Использование Visual Studio «Вставить JSON как классы» дает такие же функциональные возможности, но немного другие:
public class Rootobject
{
public Application[] Application { get; set; }
public Mailsettings MailSettings { get; set; }
}
public class Mailsettings
{
public string MailTo { get; set; }
public string MailSubject { get; set; }
}
public class Application
{
public string Office { get; set; }
public string[] LogPath { get; set; }
}
Пользователи Visual Studio Code могут получить ту же функцию с помощью JSON как расширение кода на базе QuickType.
Скопируйте строку json и используйте встроенную функцию Visual Studio, чтобы создать собственный класс для соответствующего json.
- Перейти к редактированию -> Специальная вставка -> Вставить JSON как класс
Это создаст для вас собственный класс. Теперь, используя библиотеку Newtonsoft.Json, вы можете десериализовать свой json.
Я протестировал ваш код. Ваша проблема в вашей модели RootObject. В вашем RootObject у вас есть набор приложений, а не одно приложение. Я поменял его, и он работал правильно.
Ваш JSON не соответствует структуре вашего класса. Например, ваш JSON имеет массив свойств
Application, а в структуре вашего класса есть одинApplication, который имеетList<String> offices.