我有这样的JSON
{
"Application": [
{
"Office": "London",
"LogPath": [
"\\\\server1\filepath\\"
]
},
{
"Office": "Paris",
"LogPath": [
"\\\\server2\\logpath1\\",
"\\\\server2\\logpath2\\"
]
}
],
"MailSettings": {
"MailTo": "mymail@mydomain.it",
"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”})才能正确反序列化。
我的自定义类哪个错?
答案 0 :(得分:1)
您可以使用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用户可以使用由QuickType支持的JSON as Code extension获得相同的功能。
答案 1 :(得分:0)
您的自定义类应该像它。
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; }
}
答案 2 :(得分:0)
复制您的json字符串,并使用Visual Studio内置功能为各个json创建自定义类。
-转到“编辑”->“特殊粘贴”->“将JSON作为类粘贴”
这将为您创建自定义类。 现在,使用Newtonsoft.Json库,您可以反序列化json。
答案 3 :(得分:0)
我测试了您的代码。您的问题出在您的RootObject模型中。 在RootObject中,您有一个应用程序集合,而不是单个应用程序。 我更改了它,然后正确地工作了。