JSON 요청을 전달하는 서비스에서 작업 중이므로 XML로 변환해야하며 XML 스키마와 비교 한 다음 그 작업을 수행해야합니다.C#에서 JSON을 XML로 변환 할 때의 문제 처리 속성
내 문제는 속성에 있습니다. 예를 들어, 내 JSON 요청은 다음과 같습니다
{
"BookingSearch_IN": {
"MsgHeader": {
"MessageID": "ABC010101",
"ContextRecord": {
"ContextInfo": {
"ItineraryDetails": {
"ItinerarySeqNmbr": "1",
"StartDate": "2017-04-01",
"EndDate": "2017-04-14",
"LocationStart": {
"LocationContext": "AIRPORT",
"LocationCode": "MIA"
},
"LocationEnd": {
"LocationContext": "AIRPORT",
"LocationCode": "MIA"
}
},
"ExtraInfoList": {
"ExtraInfo": {
"Category": "CRUISE",
"Item": {
"Code": "SHIP_CODE",
"Value": "MAGIC"
}
}
},
"_ResType": "Vacation"
}
}
},
"_xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
"_xmlns:cs": "http://MyCompany.com",
"_version": "6.66",
"__prefix": "cs"
}
}
내가 사용 : XmlDocument doc = JsonConvert.DeserializeXmlNode(jsonObject);
가 XML로 변환 할 수 있습니다. 는 XML 결과는 다음과 같습니다
<BookingSearch_IN>
<MsgHeader>
<MessageID>ABC010101</MessageID>
<ContextRecord>
<ContextInfo>
<ItineraryDetails>
<ItinerarySeqNmbr>1</ItinerarySeqNmbr>
<StartDate>2017-04-01</StartDate>
<EndDate>2017-04-14</EndDate>
<LocationStart>
<LocationContext>AIRPORT</LocationContext>
<LocationCode>MIA</LocationCode>
</LocationStart>
<LocationEnd>
<LocationContext>AIRPORT</LocationContext>
<LocationCode>MIA</LocationCode>
</LocationEnd>
</ItineraryDetails>
<ExtraInfoList>
<ExtraInfo>
<Category>CRUISE</Category>
<Item>
<Code>SHIP_CODE</Code>
<Value>MAGIC</Value>
</Item>
</ExtraInfo>
</ExtraInfoList>
<_ResType>Vacation</_ResType>
</ContextInfo>
</ContextRecord>
</MsgHeader>
<xsi>http://www.w3.org/2001/XMLSchema-instance</xsi><cs>http://MyCompany.com</cs><_version>6.66</_version><__prefix>cs</__prefix>
</BookingSearch_IN>
결과 XML 다른 요소 (between </MsgHeader> and </BookingSearch_IN>)
로 문서의 끝 부분에있는 루트 요소의 특성이 있습니다. 내 문제는 다른 고객의 XML에 대해이 XML의 유효성을 검사하는 서비스가 루트 요소에서 이러한 특성을 검사한다는 것입니다. ....는 루트 요소는 <cs:BookingSearch_IN xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cs="http://MyCompany.com" version="5.22">
될 것으로 기대하기 때문에
<?xml version="1.0" encoding="UTF-8"?>
<cs:BookingSearch_IN xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cs="http://MyCompany.com" version="6.66">
<MsgHeader>
<MessageID>ABC010101</MessageID>
<ContextRecord>
<ContextInfo ResType="Vacation">
<ItineraryDetails>
<ItinerarySeqNmbr>1</ItinerarySeqNmbr>
<StartDate>2017-04-01</StartDate>
<EndDate>2017-04-14</EndDate>
<LocationStart>
<LocationContext>AIRPORT</LocationContext>
<LocationCode>MIA</LocationCode>
</LocationStart>
<LocationEnd>
<LocationContext>AIRPORT</LocationContext>
<LocationCode>MIA</LocationCode>
</LocationEnd>
</ItineraryDetails>
<ExtraInfoList>
<ExtraInfo>
<Category>CRUISE</Category>
<Item>
<Code>SHIP_CODE</Code>
<Value>MAGIC</Value>
</Item>
</ExtraInfo>
</ExtraInfoList>
</ContextInfo>
</ContextRecord>
</MsgHeader>
</cs:BookingSearch_IN>
코드가 실패 할이 상황을 처리하는 방법에 대한 조언을 : 다음 코드는 XML이 될 것으로 예상 어떻게? 또는 이러한 속성을 루트 요소에 속한 위치로 다시 가져 오는 방법은 무엇입니까?
필자는 코드를 테스트해야했기 때문에 XML 샘플을 JSON으로 변환하고 작동하는지 확인하기 위해 온라인 도구를 검색했습니다. JSON 형식으로 XML을 표현하는 "표준"방법이 없다는 것을 알았습니다. 웹 사이트 중 하나에서 XML을 JSON으로 변환했습니다.이 방식은 요소 바로 다음에 접두사 "_"가있는 방식으로 속성을 사용했습니다. 나는 그 온라인 도구를 사용하여 "_"대신 "_"을 사용할 수 있다고 생각합니다. 나는 NewtonSoft가 그 속성에 대해 "@"를 예상했는지 몰랐다. 당신의 대답은 내 문제를 해결했습니다 ... 정보 주셔서 감사합니다! –
'DataContractJsonSerializer'가'_'s ...를 사용한다고 말하고 싶습니다. 그러나 그래, 표준이 없으며, 각 시리얼 라이저에는 자체 메서드가 있습니다. –