JSON.NET C #을 사용하여 내부 클래스가있는 json 파일로 역 직렬화

Goozo

내 json 파일에 다음 구조가 있습니다.

  "missionName": "missionname",
  "thumb_image": "pics/mission-info.png",
   "uplinkPage": [
    {
        "RPC": {
            "name": "RPC",
            "rpc": "",
            "args": ""
        },
        "EXE": {
            "name": "app1",
            "prog": "",
            "args": ""
        },
        "VM": {
            "name": "VM",
            "name": "",
            "args": ""
        },
        "JAR": {
            "name": "JAR",
            "prog": "",
            "args": ""
        },
        "link": {
            "name": "somelink",
            "url": ""
        }
    }
],

이를 위해 다음과 같은 수업이 있습니다.

 public class EXE
{
   public string name { get; set; }
   public string prog { get; set; }
   public string args { get; set; }
}

public class RPC
{
    public string name { get; set; }
    public string rpc { get; set; }
    public string args { get; set; }
}

public class VM
{
    public string name { get; set; }
    public string args { get; set; }
}

public class JAR
{
    public string name { get; set; }
    public string prog { get; set; }
    public string args { get; set; }
}

public class Link
{
    public string name { get; set; }
    public string url { get; set; }
}

 public class UplinkPage
{
    public VM[] vmList { get; set; }
    public EXE[] exeList { get; set; }
    public RPC[] rpcList { get; set; }
    public JAR[] jarList { get; set; }
    public Link[] linkList { get; set; }
}

 public class Rootobject
{
    public string missionName { get; set; }
    public string thumb_image { get; set; }     
    public Uplinkpage[] uplinkPage { get; set; }        
}

uplinkPage 섹션에는 각각의 EXE, RPC, VM .. 섹션이 하나 이상있을 수 있습니다. 나는 이와 같은 곱셈 섹션을 추가하려고했습니다

"EXE": {
            "1": {
                "name": "app1",
                "data-prog": "",
                "data-args": ""
            },
            "2": { 
                "name": "app2",
            "data-prog": "",
            "data-args": ""
            }
        }

내가 그렇게 역 직렬화를 할 때

Rootobject page = JsonConvert.DeserializeObject<Rootobject>(File.ReadAllText("mission1.json"));

나는 객체를 얻고 동일한 유형의 곱셈 값이있는 경우를 제외하고는 모든 것을 읽을 수 있습니다. 섹션을 배열로 선언하면

public EXE[] exeList { get; set; }

나는 마지막 하나를 얻을 것이다.

Dictionary<string,EXE> exeList {get; set;}

나는 첫 번째를 얻을 것이다. 사전을 사용할 때 EXE 유형이 EXE1로 변경되는 것을 발견했습니다.

그래서 나는 내가 뭘 잘못하고 있는지 궁금했다. 내가 여기서 임무를 수행하고 있습니까?

건배, es

dbc

중복 될 수있는 JSON 속성이있을 때마다 이름이 중복 된 여러 속성보다는 해당 속성의 값을 JSON 배열 로 나타내는 것이 가장 쉽습니다 . Ie 대신

{
    "EXE" : {"id":1},
    "RPC" : {"name":"a"},        
    "EXE" : {"id":2},
}

원하는 작업 :

{
    "EXE" : [{"id":1}, {"id":2}],
    "RPC" : [{"name":"a"}]        
}

마찬가지로 VM클래스에서 name여러 번 표시되므로 name배열도 있어야합니다.

public class VM
{
    public string [] name { get; set; }
    public string args { get; set; }
}

( 중복 된 속성 이름을 역 직렬화 하는 것은 불가능 하지 않으며 어렵고 사용자 지정 변환기가 필요 합니다 . 동일한 개체에서 중복 된 속성 이름을 사용하여 JSON을 역 직렬화하는 방법을 참조하십시오 . JSON 형식을 제어하므로이를 피하는 것이 좋습니다. 중첩 사용 질문에서 제안한대로 인덱싱 된 속성이있는 객체도 옵션입니다. 덜 어렵지만 여전히 사용자 정의 변환이 필요 합니다 . 중첩 된 객체에 대해 Newton Soft를 사용하여이 JSON을 구문 분석하는 방법을 참조하십시오 . 그러나 JSON 배열을 사용하는 것이 가장 쉽습니다.)

다음으로, 일관성이없는 경우 C # 속성 이름을 JSON 속성 이름에 매핑하는 방법을 Json.NET에 알려야합니다. 예를 들어 JSON에는 속성이 "EXE"있지만 C #에서는 속성 이름이 public EXE[] exeList { get; set; }. JSON 속성의 이름을 바꾸거나 C # 속성의 이름을 바꾸거나 다음을 사용하여 매핑을 만들 수 있습니다 [JsonProperty].

public class UplinkPage
{
    [JsonProperty("VM")]
    public VM[] vmList { get; set; }

    [JsonProperty("EXE")]
    public EXE[] exeList { get; set; }

    [JsonProperty("RPC")]
    public RPC[] rpcList { get; set; }

    [JsonProperty("JAR")]
    public JAR[] jarList { get; set; }

    [JsonProperty("link")]
    public Link[] linkList { get; set; }
}

나는 또한 당신의 EXE객체가 때때로 "data-prog"속성을 가지고 있고 때로는 단지 "prog". 하나를 표준화해야합니다.

따라서 JSON은 다음과 같아야합니다.

{
  "missionName": "missionname",
  "thumb_image": "pics/mission-info.png",
  "uplinkPage": [
    {
      "RPC": [
        {
          "name": "RPC",
          "rpc": "",
          "args": ""
        }
      ],
      "EXE": [
        {
          "name": "app1",
          "prog": "prog1",
          "args": "args1"
        },
        {
          "name": "app2",
          "prog": "prog2",
          "args": "args2"
        }
      ],
      "VM": [
        {
          "name": [
            "VM",
            ""
          ],
          "args": ""
        }
      ],
      "JAR": [
        {
          "name": "JAR",
          "prog": "",
          "args": ""
        }
      ],
      "link": [
        {
          "name": "somelink",
          "url": ""
        }
      ]
    }
  ]
}

수업은 다음과 같아야합니다.

public class EXE
{
    public string name { get; set; }
    public string prog { get; set; }
    public string args { get; set; }
}

public class RPC
{
    public string name { get; set; }
    public string rpc { get; set; }
    public string args { get; set; }
}

public class VM
{
    public string [] name { get; set; }
    public string args { get; set; }
}

public class JAR
{
    public string name { get; set; }
    public string prog { get; set; }
    public string args { get; set; }
}

public class Link
{
    public string name { get; set; }
    public string url { get; set; }
}

public class UplinkPage
{
    [JsonProperty("VM")]
    public VM[] vmList { get; set; }

    [JsonProperty("EXE")]
    public EXE[] exeList { get; set; }

    [JsonProperty("RPC")]
    public RPC[] rpcList { get; set; }

    [JsonProperty("JAR")]
    public JAR[] jarList { get; set; }

    [JsonProperty("link")]
    public Link[] linkList { get; set; }
}

public class Rootobject
{
    public string missionName { get; set; }
    public string thumb_image { get; set; }
    public UplinkPage[] uplinkPage { get; set; }
}

프로토 타입 바이올린 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C #을 사용하여 클래스로 JSON 역 직렬화

분류에서Dev

JSON.NET을 사용하여 파생 클래스로 역 직렬화

분류에서Dev

C #으로 JSON 파일을 역 직렬화하는 방법

분류에서Dev

JSON.net을 사용하여 동적으로 역 직렬화

분류에서Dev

Gson을 사용하여 로컬 json 파일을 역 직렬화하는 Kotlin

분류에서Dev

Json.net JSON 파일을 C # 사전 유형으로 직접 역 직렬화 하시겠습니까?

분류에서Dev

JSON.NET을 사용하여 C #의 클래스에서 기본 생성자가없는 json을 역 직렬화합니다.

분류에서Dev

Json 파일의 일부만 클래스 C #으로 역 직렬화하는 방법

분류에서Dev

가변 콘텐츠로 C #을 사용하여 Json 역 직렬화

분류에서Dev

Jackson을 사용하여 JAVA 클래스를 대상으로하는 JSON 직렬화 및 역 직렬화

분류에서Dev

GSON 또는 Jackson을 사용하여 일반 인수를 사용하여 JSON을 클래스로 역 직렬화

분류에서Dev

C #에서 Newtonsoft Json.NET을 사용하여 JSON 역 직렬화

분류에서Dev

파일에서 개체를 역 직렬화 및 재 직렬화하는 데 문제가있는 C # JSON.net

분류에서Dev

동적 필드 이름을 사용하여 JSON을 C # 클래스로 역 직렬화

분류에서Dev

구성을 사용하는 C # 클래스로 JSON을 역 직렬화하는 방법

분류에서Dev

C # Newtonsoft를 사용하여 JSON 파일을 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

System.Text.Json을 사용하여 동적 속성을 포함하는 클래스로 JSON 역 직렬화

분류에서Dev

C # JSON.NET을 사용하여 Dictionary <(Enum, Enum), string> 역 직렬화

분류에서Dev

Newtonsoft.Json을 사용하여 C #에서 중첩 배열로 json을 역 직렬화하는 방법

분류에서Dev

내 모델에서 Json.NET에 대한 종속성을 생성하지 않고 파생 클래스를 역 직렬화하는 방법이 있습니까?

분류에서Dev

Newtonsoft.JSON을 사용하여 C #으로 Json 문자열 역 직렬화

분류에서Dev

DataContractJsonSerializerOperationFormatter는 JSON.NET을 사용하여 역 직렬화하지 않습니다.

분류에서Dev

ASP.NET MVC4 'ExtraElements'를 사용하여 JSON을 C # ViewModel로 역 직렬화

분류에서Dev

Json.Net을 사용하여 DataSet으로 역 직렬화 할 때 ArgumentOutOfRange 예외

분류에서Dev

Newtosoft Json을 사용하여 Json을 null로 역 직렬화

분류에서Dev

JSON 배열 배열을 C # 클래스로 역 직렬화

분류에서Dev

JSON.NET을 사용하여 dictionary <string, object> 역 직렬화 및 직렬화

분류에서Dev

Json.NET을 사용하여 ArrayList의 ArrayList를 직렬화 및 역 직렬화하는 방법

분류에서Dev

JSON을 C # 클래스로 역 직렬화하면 null이 반환됩니다.

Related 관련 기사

  1. 1

    C #을 사용하여 클래스로 JSON 역 직렬화

  2. 2

    JSON.NET을 사용하여 파생 클래스로 역 직렬화

  3. 3

    C #으로 JSON 파일을 역 직렬화하는 방법

  4. 4

    JSON.net을 사용하여 동적으로 역 직렬화

  5. 5

    Gson을 사용하여 로컬 json 파일을 역 직렬화하는 Kotlin

  6. 6

    Json.net JSON 파일을 C # 사전 유형으로 직접 역 직렬화 하시겠습니까?

  7. 7

    JSON.NET을 사용하여 C #의 클래스에서 기본 생성자가없는 json을 역 직렬화합니다.

  8. 8

    Json 파일의 일부만 클래스 C #으로 역 직렬화하는 방법

  9. 9

    가변 콘텐츠로 C #을 사용하여 Json 역 직렬화

  10. 10

    Jackson을 사용하여 JAVA 클래스를 대상으로하는 JSON 직렬화 및 역 직렬화

  11. 11

    GSON 또는 Jackson을 사용하여 일반 인수를 사용하여 JSON을 클래스로 역 직렬화

  12. 12

    C #에서 Newtonsoft Json.NET을 사용하여 JSON 역 직렬화

  13. 13

    파일에서 개체를 역 직렬화 및 재 직렬화하는 데 문제가있는 C # JSON.net

  14. 14

    동적 필드 이름을 사용하여 JSON을 C # 클래스로 역 직렬화

  15. 15

    구성을 사용하는 C # 클래스로 JSON을 역 직렬화하는 방법

  16. 16

    C # Newtonsoft를 사용하여 JSON 파일을 역 직렬화하는 방법은 무엇입니까?

  17. 17

    System.Text.Json을 사용하여 동적 속성을 포함하는 클래스로 JSON 역 직렬화

  18. 18

    C # JSON.NET을 사용하여 Dictionary <(Enum, Enum), string> 역 직렬화

  19. 19

    Newtonsoft.Json을 사용하여 C #에서 중첩 배열로 json을 역 직렬화하는 방법

  20. 20

    내 모델에서 Json.NET에 대한 종속성을 생성하지 않고 파생 클래스를 역 직렬화하는 방법이 있습니까?

  21. 21

    Newtonsoft.JSON을 사용하여 C #으로 Json 문자열 역 직렬화

  22. 22

    DataContractJsonSerializerOperationFormatter는 JSON.NET을 사용하여 역 직렬화하지 않습니다.

  23. 23

    ASP.NET MVC4 'ExtraElements'를 사용하여 JSON을 C # ViewModel로 역 직렬화

  24. 24

    Json.Net을 사용하여 DataSet으로 역 직렬화 할 때 ArgumentOutOfRange 예외

  25. 25

    Newtosoft Json을 사용하여 Json을 null로 역 직렬화

  26. 26

    JSON 배열 배열을 C # 클래스로 역 직렬화

  27. 27

    JSON.NET을 사용하여 dictionary <string, object> 역 직렬화 및 직렬화

  28. 28

    Json.NET을 사용하여 ArrayList의 ArrayList를 직렬화 및 역 직렬화하는 방법

  29. 29

    JSON을 C # 클래스로 역 직렬화하면 null이 반환됩니다.

뜨겁다태그

보관