Ich arbeite an einem Dienst, in dem ich eine JSON-Anfrage übergebe, ich muss sie in XML konvertieren und sie mit einigen XML-Schemas vergleichen und dann etwas damit machen.Problembehandlung bei der Konvertierung von JSON in XML in C#
Mein Problem ist mit den Attributen. Zum Beispiel ist meine JSON Anfrage:
{
"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"
}
}
Ich verwende: XmlDocument doc = JsonConvert.DeserializeXmlNode(jsonObject);
, um es zu XML zu konvertieren. Das Ergebnis ist, 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>
Das Ergebnis XML am Ende des Dokuments die Attribute des Wurzelelements hat als weitere Elemente (between </MsgHeader> and </BookingSearch_IN>)
. Mein Problem ist, dass der Dienst, der diese XML gegen die XML anderer Kunden validiert, diese Attribute im Stammelement überprüft. Hier ist, wie der Code der XML sein erwartet:
<?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>
Der Code nicht
, weil es das Wurzelelement erwartet<cs:BookingSearch_IN xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cs="http://MyCompany.com" version="5.22">
sein .... Jede beraten darüber, wie mit dieser Situation umgehen? oder wie man diese Attribute dahin zurückbringt, wo sie in das Wurzelelement gehören?
Da ich meinen Code testen musste, googelte ich einige Online-Tools, um mein XML-Beispiel in JSON zu konvertieren und zu sehen, ob es funktioniert. Ich habe herausgefunden, dass es keine "normale" Möglichkeit gibt, XML im JSON-Format darzustellen. Eine der Websites konvertierte mein XML in JSON mit den Attributen genauso wie die Antwort, direkt nach dem Element, aber mit dem Präfix "_". Ich denke, ich kann das Online-Tool verwenden und ersetzen Sie einfach das "_" für "@". Ich wusste nicht NewtonSoft erwartet "@" für die Attribute. Deine Antwort hat mein Problem gelöst ... danke für die Info! –
Ich möchte sagen, dass 'DataContractJsonSerializer' die' _'s verwendet ... Aber ja, es gibt keinen Standard, jeder Serializer hat seine eigene Methode. –