>

이런 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"})가 필요합니다.

내 맞춤 클래스에 어떤 문제가 있습니까?


  • 답변 # 1

    사용자 정의 클래스는 같아야합니다.

    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

    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으로 사용할 수 있습니다.

  • 답변 # 3

    json 문자열을 복사하고 Visual Studio 빌드 기능을 사용하여 각 json에 대한 사용자 정의 클래스를 만듭니다.

    -편집으로 이동->특수 붙여 넣기->JSON을 클래스로 붙여 넣기

    이것은 사용자 정의 클래스를 생성합니다. 이제 Newtonsoft.Json 라이브러리를 사용하면 json을 직렬화 해제 할 수 있습니다.

  • 답변 # 4

    코드를 테스트했습니다. 문제는 RootObject 모델에 있습니다. RootObject에는 단일 응용 프로그램이 아닌 응용 프로그램 모음이 있습니다. 변경 한 후 제대로 작동했습니다.

  • 이전 path - MBED_ARM_PATH가 환경 변수로 설정되었지만 존재하지 않습니다
  • 다음 php - 워드 프레스 - 404 페이지에 최상위 메뉴가 표시되지 않음