내 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
중복 될 수있는 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] 삭제
몇 마디 만하겠습니다