簡體   English   中英

C#JSON反序列化為復雜類

[英]C# JSON deserialize into complex class

我有這樣的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”})才能正確反序列化。

我的自定義課程出了什么問題?

您可以使用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提供支持的Code擴展獲得相同的功能。

您的自定義類應該像這樣。

 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; }
    }

復制您的json字符串,並使用Visual Studio內置功能為各個json創建自定義類。

-轉到編輯->特殊粘貼->將JSON作為類粘貼

這將為您創建自定義類。 現在使用Newtonsoft.Json庫,您可以反序列化json。

我測試了您的代碼。您的問題出在您的RootObject模型中。 在RootObject中,您有一個應用程序集合,而不是單個應用程序。 我改變了它,正確地扭曲了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM