C#JSON反序列化为复杂类

时间:2018-11-27 11:09:36

标签: javascript c# json serialization json.net

我有这样的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”})才能正确反序列化。

我的自定义类哪个错?

4 个答案:

答案 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中,您有一个应用程序集合,而不是单个应用程序。 我更改了它,然后正确地工作了。