Zuordnung zwischen JSON und XMLMapping Between JSON and XML

Die von der JsonReaderWriterFactory erzeugten Reader und Writer stellen eine XML API über JSON (JavaScript Object Notation)-Inhalte bereit.The readers and writers produced by the JsonReaderWriterFactory provide an XML API over JavaScript Object Notation (JSON) content. JSON codiert Daten mit einer Teilmenge der Objektliterale von JavaScript.JSON encodes data using a subset of the object literals of JavaScript. Die von dieser Factory erzeugten Reader und Writer werden auch verwendet, wenn JSON-Inhalte von einer Windows Communication Foundation (WCF)Windows Communication Foundation (WCF)-Anwendung über ein WebMessageEncodingBindingElement oder eine WebHttpBinding gesendet oder empfangen werden.The readers and writers produced by this factory are also used when JSON content is being sent or received by Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) applications using the WebMessageEncodingBindingElement or the WebHttpBinding.

Wenn der JSON-Reader mit JSON-Inhalten initialisiert wird, verhält er sich so wie ein XML-Reader bei XML-Inhalten.When initialized with JSON content, the JSON reader behaves in the same way that a textual XML reader does over an instance of XML. Wenn dem JSON-Writer eine Aufruffolge übergeben wird, die bei einem textbasierten XML-Reader eine bestimmte XML-Instanz erzeugt, wird JSON-Inhalt ausgegeben.The JSON writer, when given a sequence of calls that on a textual XML reader produces a certain XML instance, writes out JSON content. Die Zuordnung zwischen dieser XML-Instanz und dem JSON-Inhalt wird in diesem Thema für die Verwendung in fortgeschrittenen Szenarios beschrieben.The mapping between this instance of XML and the JSON content is described in this topic for use in advanced scenarios.

Bei der Verarbeitung durch WCFWCF wird JSON intern als XML-Infoset dargestellt.Internally, JSON is represented as an XML infoset when processed by WCFWCF. Normalerweise müssen Sie sich nicht mit dieser internen Darstellung befassen, da es sich lediglich um eine logische Zuordnung handelt: JSON wird normalerweise nicht im physischen Speicher in XML konvertiert bzw. XML wird nicht physisch in JSON umgewandelt.Normally you do not have to be concerned with this internal representation as the mapping is only a logical one: JSON is normally not physically converted to XML in memory or converted to JSON from XML. Diese Zuordnung bedeutet, dass über XML-APIs auf JSON-Inhalte zugegriffen wird.The mapping means that XML APIs are used to access JSON content.

Wenn JSON in WCFWCF verwendet wird, wird im üblichen Szenario gegebenenfalls DataContractJsonSerializer automatisch vom WebScriptEnablingBehavior-Verhalten bzw. vom WebHttpBehavior-Verhalten eingebunden.When WCFWCF uses JSON, the usual scenario is that the DataContractJsonSerializer is automatically plugged in by the WebScriptEnablingBehavior behavior, or by the WebHttpBehavior behavior when appropriate. Der DataContractJsonSerializer kennt die Zuordnung zwischen JSON und dem XML-Infoset und gibt vor, den JSON-Inhalt direkt zu verarbeiten.The DataContractJsonSerializer understands the mapping between JSON and the XML infoset and acts as if it is dealing with JSON directly. (Der DataContractJsonSerializer kann mit jedem beliebigen XML-Reader oder -Writer verwendet werden, sofern der XML-Inhalt der folgenden Zuordnung entspricht.)(It is possible to use the DataContractJsonSerializer with any XML reader or writer, with the understanding that the XML conforms to the following mapping.)

In fortgeschrittenen Szenarios wird es möglicherweise notwendig, direkt auf die folgende Zuordnung zuzugreifen.In advanced scenarios, it may become necessary to directly access the following mapping. Diese Szenarios sind gegeben, wenn Sie JSON mit einem benutzerdefinierten Verfahren serialisieren und deserialisieren möchten, ohne auf den DataContractJsonSerializer zurückzugreifen, oder wenn der Message-Typ bei Nachrichten, die JSON enthalten, direkt verarbeitet wird.These scenarios occur when you want to serialize and deserialize JSON in custom ways, without relying on the DataContractJsonSerializer, or when dealing with the Message type directly for messages containing JSON. Die JSON-XML-Zuordnung wird auch zur Nachrichtenprotokollierung verwendet.The JSON-XML mapping is also used for message logging. Bei Verwendung der Nachrichtenprotokollierungsfunktion von WCFWCF werden JSON-Nachrichten entsprechend der im nächsten Abschnitt beschriebenen Zuordnung als XML protokolliert.When using the message logging feature in WCFWCF, JSON messages is logged as XML according to the mapping described in the next section.

Das folgende Beispiel eines JSON-Dokuments soll zur Klärung dessZuordnungskonzepts dienen:To clarify the concept of a mapping, the following example is of a JSON document.

{"product":"pencil","price":12}  

Um dieses JSON-Dokument mit einem der oben erwähnten Reader zu lesen, verwenden Sie die gleiche Sequenz von XmlDictionaryReader-Aufrufen, die Sie zum Lesen des folgenden XML-Dokuments verwenden würden:To read this JSON document using one of the readers previously mentioned, use the same sequence of XmlDictionaryReader calls as you would to read the following XML document.

<root type="object">  
    <product type="string">pencil</product>  
    <price type="number">12</price>  
</root>  

Wenn die JSON-Nachricht aus dem Beispiel von WCFWCF empfangen und protokolliert wird, würde das vorstehende Protokoll folgendes XML-Fragment enthalten.Furthermore, if the JSON message in the example is received by WCFWCF and logged, you would see the XML fragment in the preceding log.

Zuordnung zwischen JSON und dem XML-InfosetMapping Between JSON and the XML Infoset

Formal, die Zuordnung zwischen JSON wie im ist RFC 4627 (außer mit bestimmten Einschränkungen gelockerte und bestimmte andere Einschränkungen hinzugefügt) und die XML-Infoset (und nicht Text-XML) als in der beschriebenen XML-Informationen Legen Sie .Formally, the mapping is between JSON as described in RFC 4627 (except with certain restrictions relaxed and certain other restrictions added) and the XML infoset (and not textual XML) as described in XML Information Set . Finden Sie in diesem Thema für die Definitionen der Informationselementen und Feldern in [eckigen Klammern].See this topic for the definitions of information items and fields in [square brackets].

Ein leeres JSON-Dokument wird einem leeren XML-Dokument zugeordnet, und ein leeres XML-Dokument wird einem leeren JSON-Dokument zugeordnet.A blank JSON document maps to blank XML document, and a blank XML document maps to a blank JSON document. In der Zuordnung von XML zu JSON sind weder Leerräume vor noch Leerräume nach dem Dokument zulässig.On the XML to JSON mapping, preceding whitespace and trailing whitespace after the document are not allowed.

Die Zuordnung wird zwischen einem Dokumentinformationselement (Document Information Item, DII) oder einem Elementinformationselement (Element Information Item, EII) und JSON definiert.The mapping is defined between either a Document Information Item (DII) or an Element Information Item (EII) and JSON. Das EII bzw. die [document element]-Eigenschaft des DII wird als JSON-Stammelement bezeichnet.The EII, or the DII’s [document element] property, is referred to as the Root JSON Element. Beachten Sie das, dass Dokumentfragmente (XML mit mehreren Stammelementen) nicht von dieser Zuordnung unterstützt werden.Note that document fragments (XML with multiple root elements) are not supported in this mapping.

Beispiel: Sowohl für das folgende Dokument:Example: The following document:

<?xml version="1.0"?>

<root type="number">42</root>

als auch für das folgende Element:And the following element:

<root type="number">42</root>

ist eine Zuordnung zu JSON definiert.Both have a mapping to JSON. Die <root>-Element ist das JSON-Stammelement in beiden Fällen.The <root> element is the Root JSON Element in both cases.

Weiterhin ist im Fall eines DII Folgendes zu berücksichtigen:Furthermore, in the case of a DII, the following should be considered:

  • Einige Elemente dürfen in der [children]-Liste nicht vorhanden sein.Some items in the [children] list must not be present. Verlassen Sie sich beim Lesen von XML, das aus einer Zuordnung von JSON stammt, nicht auf diese Tatsache.Do not rely on this fact when reading XML mapped from JSON.

  • Die [children]-Liste enthält keine Kommentarinformationselemente.The [children] list holds no comment information items.

  • Die [children]-Liste enthält keine DTD-Informationselemente.The [children] list holds no DTD information items.

  • Die [Children]-Liste enthält keine persönlichen Informationen (PI)-Informationselemente (die <? XML… > Deklaration wird nicht als ein PI-Informationselement betrachtet)The [children] list holds no personal Information (PI) information items (the <?xml…> declaration is not considered a PI information item)

  • Der [notations]-Satz ist leer.The [notations] set is empty.

  • Der [unparsed entities]-Satz ist leer.The [unparsed entities] set is empty.

Beispiel: Das folgende Dokument kann JSON nicht zugeordnet werden, weil die [children]-Liste ein PI und einen Kommentar enthält.Example: The following document has no mapping to JSON because [children] holds a PI and a comment.

<?xml version="1.0"?>

<!--comment--><?pi?>

<root type="number">42</root>

Das EII für das JSON-Stammelement verfügt über folgende Eigenschaften:The EII for the Root JSON Element has the following characteristics:

  • [local name] hat den Wert "root".[local name] has the value "root".

  • [namespace name] hat keinen Wert.[namespace name] has no value.

  • [prefix] hat keinen Wert.[prefix] has no value.

  • [children] kann entweder EIIs (die innere Elemente darstellen, die an späterer Stelle näher beschrieben werden) oder CIIs (Character Information Items (Zeicheninformationselemente, die an späterer Stelle näher beschrieben werden) oder keines dieser Elemente enthalten, jedoch nicht beide Elementtypen.[children] may either contain EIIs (which represent Inner Elements as described further) or CIIs (Character Information Items as described further) or none of these, but not both.

  • [Attribute] kann die folgenden optionalen Attributinformationselemente (AIIs) enthalten.[attributes] may contain the following optional attribute information items (AIIs)

  • Das JSON-Typattribut ("type"), das an späterer Stelle näher beschrieben wird.The JSON Type Attribute ("type") as described further. Dieses Attribut wird verwendet, um den JSON-Typ (String, Zahl, Boolean, Objekt, Array oder NULL) im zugeordneten XML beizubehalten.This attribute is used to preserve the JSON type (string, number, boolean, object, array or null) in the mapped XML.

  • Das Datenvertrags-Namensattribut ("__type"), das an späterer Stelle näher beschrieben wird.The Data Contract Name Attribute ("__type") as described further. Dieses Attribut kann nur angegeben werden, wenn auch das JSON-Typattribut angegeben wurde und dessen [normalized value] gleich "object" ist.This attribute is can only be present if the JSON type attribute is also present and its [normalized value] is "object". Dieses Attribut wird vom DataContractJsonSerializer verwendet, um die Typinformationen des Datenvertrags beizubehalten, beispielsweise in polymorphen Fällen, in denen ein abgeleiteter Typ serialisiert und ein Basistyp erwartet wird.This attribute is used by the DataContractJsonSerializer to preserve data contract type information - for example, in polymorphic cases where a derived type is serialized and where a base type is expected. Wenn Sie nicht mit dem DataContractJsonSerializer arbeiten, wird dieses Attribut wird meist ignoriert.If you are not working with the DataContractJsonSerializer, in most cases, this attribute is ignored.

  • [in-scope namespaces] enthält die Bindung zwischen XML und „http://www.w3.org/XML/1998/namespace“ entsprechend der Infosetspezifikation.[in-scope namespaces] contains the binding of "xml" to "http://www.w3.org/XML/1998/namespace" as mandated by the infoset specification.

  • [children], [attributes] und [in-scope namespaces] dürfen keine anderen Elemente als die oben genannten enthalten, und [namespace attributes] darf keine Member enthalten. Sie dürfen sich beim Lesen von XML, das aus einer Zuordnung von JSON erzeugt wurde, aber nicht darauf verlassen, dass dies zutrifft.[children], [attributes] and [in-scope namespaces] must not have any items other than as specified previously and [namespace attributes] must have no members, but do not rely on these facts when reading XML mapped from JSON.

Beispiel: Das folgende Dokument lässt sich JSON nicht zuordnen, weil [namespace attributes] nicht leer ist.Example: The following document has no mapping to JSON because [namespace attributes] is not empty.

<?xml version="1.0"?>

<root xmlns:a="myattributevalue">42</root>

Das AII für das JSON-Typattribut verfügt über folgende Eigenschaften:The AII for the JSON Type Attribute has the following characteristics:

  • [namespace name] hat keinen Wert.[namespace name] has no value.

  • [prefix] hat keinen Wert.[prefix] has no value.

  • [local name] lautet "type".[local name] is "type".

  • [normalized value] enthält einen der möglichen Typwerte, die im folgenden Abschnitt beschrieben werden.[normalized value] is one of the possible type values described in the following section.

  • [specified] hat den Wert true.[specified] is true.

  • [attribute type] hat keinen Wert.[attribute type] has no value.

  • [references] hat keinen Wert.[references] has no value.

Das AII für das Datenvertragsnamensattribut verfügt über folgende Eigenschaften:The AII for the Data Contract Name Attribute has the following characteristics:

  • [namespace name] hat keinen Wert.[namespace name] has no value.

  • [prefix] hat keinen Wert.[prefix] has no value.

  • [local name] lautet "__type" (zwei Unterstriche und dann "type").[local name] is "__type" (two underscores and then "type").

  • [normalized value] kann jede gültige Unicode-Zeichenfolge enthalten. Die Zuordnung dieser Zeichenfolge zu JSON wird im folgenden Abschnitt beschrieben.[normalized value] is any valid Unicode string – the mapping of this string to JSON is described in the following section.

  • [specified] hat den Wert true.[specified] is true.

  • [attribute type] hat keinen Wert.[attribute type] has no value.

  • [references] hat keinen Wert.[references] has no value.

Innere Elemente innerhalb des JSON-Stammelements oder andere innere Elemente verfügen über die folgenden Eigenschaften:Inner elements contained within the Root JSON Element or other inner elements have the following characteristics:

  • [local name] kann jeden beliebigen Wert enthalten, wie an späterer Stelle näher beschrieben wird.[local name] may have any value as described further

  • Für [namespace name], [prefix], [children], [attributes], [namespace attributes] und [in-scope namespaces] gelten die gleichen Regeln wie für das JSON-Stammelement.[namespace name], [prefix], [children], [attributes], [namespace attributes], and [in-scope namespaces] are subject to the same rules as the Root JSON Element.

Sowohl im JSON-Stammelement als auch in den inneren Elementen definiert das JSON-Typattribut die Zuordnung zu JSON und den möglichen [children]-Elementen und deren Interpretation.In both the Root JSON Element and the inner elements, the JSON Type Attribute defines the mapping to JSON and the possible [children] and their interpretation. Im Element [normalized value] des Elements wird zwischen Groß- und Kleinschreibung unterschieden. Es darf nur Kleinbuchstaben und keinen Leerraum enthalten.The attribute’s [normalized value] is case-sensitive and must be lowercase, and cannot contain whitespace.

[normalized value] des AII von JSON Type Attribute[normalized value] of JSON Type Attribute’s AII Zulässige [children]-Elemente des entsprechenden EIIAllowed [children] of the corresponding EII Zuordnung zu JSONMapping to JSON
string (oder Fehlen des JSON-Typs AII)string (or absence of the JSON type AII)

Ein string und das Fehlen des JSON- TypsAII sind gleichbedeutend, und somit ist string der Standard.A string and the absence of the JSON type AII are the same makes string the default.

Deshalb wird <root> string1</root>``string in JSON dem "string1" zugeordnet.So, <root> string1</root> maps to the JSON string "string1".
0 oder mehr CIIs0 or more CIIs Eine string in JSON (JSON RFC, Abschnitt 2.5).A JSON string (JSON RFC, section 2.5). Jedes char ist ein Zeichen, das dem im CII angegebenen [character code] entspricht.Each char is a character that corresponds to the [character code] from the CII. Wenn keine CIIs vorhanden sind, wird eine leere JSON-string zugeordnet.If there are no CIIs, it maps to an empty JSON string.

Beispiel: Das folgende Element wird einem JSON-Fragment zugeordnet.Example: The following element maps to a JSON fragment:

<root type="string">42</root>

Das JSON-Fragment lautet "42".The JSON fragment is "42".

Bei der Zuordnung von XML zu JSON müssen Zeichen, denen ein Escapezeichen vorangestellt werden muss, Escapezeichen zugeordnet werden. Alle anderen Zeichen werden Zeichen zugeordnet, denen keine Escapezeichen voransteht.On XML to JSON mapping, characters that must be escaped map to escaped characters, all others map to characters that are not escaped. Das Zeichen "/" Sonderregeln – es wird eine Escapezeichenfolge umgewandelt, auch wenn sie keinen werden (ausgeschrieben "\/").The "/" character is special – it is escaped even though it does not have to be (written out as "\/").

Beispiel: Das folgende Element wird einem JSON-Fragment zugeordnet.Example: The following element maps to a JSON fragment.

<root type="string">the "da/ta"</root>

Die JSON-Fragment lautet "die \" da\/TA\"".The JSON fragment is "the \"da\/ta\"".

Bei der Zuordnung von JSON zu XML werden Zeichen, denen ein Escapezeichen vorangestellt ist, und andere Zeichen ohne Escapezeichen dem entsprechenden [character code] richtig zugeordnet.On JSON to XML mapping, any escaped characters and characters that are not escaped map correctly to the corresponding [character code].

Beispiel: Das JSON-Fragment "\u0041BC" entspricht dem folgenden XML-Element.Example: The JSON fragment "\u0041BC", maps to the following XML element.

<root type="string">ABC</root>

Die Zeichenfolge kann in Leerräume ('ws' im Abschnitt 2 des JSON RFC) eingeschlossen werden, die nicht in XML dargestellt werden.The string can be surrounded by whitespace ('ws' in section 2 of the JSON RFC) that does not get mapped to XML.

Beispiel: Das JSON-Fragment "ABC", (es enthält Leerräume vor dem ersten Anführungszeichen), entspricht dem folgenden XML-Element.Example: The JSON fragment "ABC", (there are spaces before the first double quote), maps to the following XML element.

<root type="string">ABC</root>

Alle im XML vorhandenen Leerräume werden Leerräumen in JSON zugeordnet.Any whitespace in XML maps to whitespace in JSON.

Beispiel: Das folgende XML-Element wird einem JSON-Fragment zugeordnet.Example: The following XML element maps to a JSON fragment.

<root type="string"> A BC </root>

Das JSON-Fragment lautet " A BC ".The JSON fragment is " A BC ".
number 1 oder mehr CIIs1 or more CIIs Eine JSON-number (JSON-RFC, Abschnitt 2.4), die von Leerraum umgeben sein kann.A JSON number (JSON RFC, section 2.4), possibly surrounded by whitespace. Jedes Zeichen in der Zahl-/Leerraum-Kombination ist ein Zeichen, das dem [character code] vom CII entspricht.Each character in the number/whitespace combination is a character that corresponds to the [character code] from the CII.

Beispiel: Das folgende Element wird einem JSON-Fragment zugeordnet.Example: The following element maps to a JSON fragment.

<root type="number"> 42</root>

Das JSON-Fragment lautet 42.The JSON fragment is 42

(Leerräume werden beibehalten.)(Whitespace is preserved).
boolean 4 oder 5 CIIs (die true bzw. false entsprechen) und möglicherweise von weiteren Leerraum-CIIs umgeben sein können.4 or 5 CIIs (which corresponds to true or false), possibly surrounded by additional whitespace CIIs. Eine CII-Folge, die der Zeichenfolge "true" entspricht, wird dem Literal true zugeordnet, und eine CII-Folge, die der Zeichenfolge "false" entspricht, wird dem Literal false zugeordnet.A CII sequence that corresponds to the string "true" is mapped to the literal true, and a CII sequence that corresponds to the string "false" is mapped to the literal false. Die Zeichenfolge umgebende Leerräume werden beibehalten.Surrounding whitespace is preserved.

Beispiel: Das folgende Element wird einem JSON-Fragment zugeordnet.Example: The following element maps to a JSON fragment.

<root type="boolean"> false</root>

Der JSON-Fragement lautet false.The JSON fragment is false.
null Keine Elemente zulässig.None allowed. Das Literal null.The literal null. Bei der Zuordnung von JSON zu XML kann null in Leerräume ('ws' im Abschnitt 2) eingeschlossen werden, die nicht in XML dargestellt werden.On JSON to XML mapping, the null may be surrounded by whitespace (‘ws’ in section 2) that does not get mapped to XML.

Beispiel: Das folgende Element wird einem JSON-Fragment zugeordnet.Example: The following element maps to a JSON fragment.

<root type="null"/>

oderor

<root type="null"></root>

::

In beiden Fällen lautet das JSON-Fragement Null.The JSON fragment in both cases is Null.
object 0 oder mehr EIIs.0 or more EIIs. Eine begin-object (linke geschweifte Klammer) wie in Abschnitt 2.2 des JSON RFC definiert, gefolgt von einem Memberdatensatz für jedes EII, wie an späterer Stelle näher beschrieben wird.A begin-object (left curly brace) as in section 2.2 of the JSON RFC, followed by a member record for each EII as described further. Wenn mehr als ein EII vorhanden ist, werden die Memberdatensätze durch Trennzeichen (Kommas) voneinander getrennt.If there is more than one EII, there are value-separators (commas) between the member records. Abgeschlossen wird die Angabe durch ein end-object (rechte geschweifte Klammer).All this is followed by an end-object (right curly brace).

Beispiel: Das folgende Element wird dem JSON-Fragment zugeordnet.Example: The following element maps to the JSON fragment.

<Stammtyp = "object" ><root type="object">

<Typ1 Type = "String" > aaa</type1 ><type1 type="string">aaa</type1>

<Typ2 Type = "String" > "BBB"</type2 ><type2 type="string">bbb</type2>

</ root ></root >

Das JSON-Fragment lautet {"type1":"aaa","type2":"bbb"}.The JSON fragment is {"type1":"aaa","type2":"bbb"}.

Wenn das Attribut für den Datenvertragstyp in der Zuordnung von XML zu JSON angegeben wird, dann wird am Anfang ein zusätzlicher Memberdatensatz hinzugefügt.If the Data Contract Type Attribute is present on XML to JSON mapping, then an additional Member Record is inserted at the beginning. Der Datensatz erhält als Namen das [local name]-Element des Datenvertragstypattributs ("__type") und als Wert das [normalized value]-Element des Attributs.Its name is the [local name] of the Data Contract Type Attribute ("__type"), and its value is the attribute's [normalized value]. Umgekehrt gilt für JSON zu XML-Zuordnung, wenn der Name der ersten memberdatensatzes dem [local Name] Daten Vertrag ein Attribut vom Typ lautet (d. h. "__geben"), eine entsprechende Datenvertragtypattributs im zugeordneten XML vorhanden ist, aber es ist kein zugehöriges EII vorhanden.Conversely, on JSON to XML mapping, if the first member-record’s name is the [local name] of the Data Contract Type Attribute (that is, "__type"), a corresponding Data Contract Type Attribute is present in the mapped XML, but a corresponding EII is not present. Beachten Sie, dass dieser Memberdatensatz als erster Datensatz im JSON-Objekt enthalten sein muss, damit diese spezielle Zuordnung erfolgen kann.Note that this member record must occur first in the JSON object for this special mapping to apply. Dies stellt eine Abweichung von der üblichen JSON-Verarbeitung dar, in der die Reihenfolge von Memberdatensätzen nicht von Bedeutung ist.This represents a departure from usual JSON processing, where the order of member records is not significant.

Beispiel:Example:

Das folgende JSON-Fragment wird XML zugeordnet.The following JSON fragment maps to XML.

{"__type":"Person","name":"John"}

Der folgende Code stellt das XML dar:The XML is the following code.

<root type="object" __type="Person"> <name type="string">John</name> </root>

Beachten Sie, dass die __geben AII vorhanden ist, aber es ist keine __geben EII.Notice that the __type AII is present, but there is no __type EII.

Wenn die Reihenfolge in JSON umgekehrt wird, wie im folgenden Beispiel gezeigt,However, if the order in the JSON is reversed as shown in the following example.

{"Name": "John","__geben": "Person"}{"name":"John","__type":"Person"}

lautet das entsprechende XML wie folgt:The corresponding XML is shown.

<root type="object"> <name type="string">John</name> <__type type="string">Person</__type> </root>

D. h. __geben keine besondere Bedeutung mehr und wird einem eii, wie gewohnt müssen keinem aii zugeordnet.That is, __type ceases to have special meaning and maps to an EII as usual, not AII.

Für das [normalized value]-Element von AII gelten für die Verwendung von Escapezeichen bei der Zuordnung zu JSON-Werten die gleichen Regeln wie bei der Zuordnung zu JSON-Zeichenfolgen. Diese Regeln sind in der Zeile "string" dieser Tabelle angegeben.Escaping/unescaping rules for the AII’s [normalized value] when mapped to a JSON value are the same as for JSON strings, specified in the "string" row of this table.

Beispiel:Example:

<root type="object" __type="\abc" />

aus dem vorigen Beispiel kann dem folgenden JSON zugeordnet werden.to the previous example can be mapped to the following JSON.

{"__type":"\\abc"}

Das-Element eines EII [lokaler Name] muss auf eine Zuordnung von XML zu JSON nicht sein "__geben".On an XML to JSON mapping, the first EII’s [local name] must not be "__type".

In der Zuordnung von Objekten von XML zu JSON wird kein Leerraum (ws) erzeugt, und bei der Zuordnung von JSON zu XML wird Leerraum ignoriert.Whitespace (ws) is never generated on XML to JSON mapping for objects and is ignored on JSON to XML mapping.

Beispiel: Das folgende JSON-Fragment wird einem XML-Element zugeordnet.Example: The following JSON fragment maps to an XML element.

{ "ccc" : "aaa", "ddd" :"bbb"}{ "ccc" : "aaa", "ddd" :"bbb"}

Das XML-Element wird im folgenden Code dargestellt.The XML element is shown in the following code.

<root type="object"> <ccc type="string">aaa</ccc> <ddd type="string">bbb</bar> </root >
Strahl "ray` 0 oder mehr EIIs0 or more EIIs Ein begin-Array (linke eckige Klammer) entsprechend Abschnitt 2.3 des JSON RFC, gefolgt von einem Arraydatensatz für jedes EII, wie an späterer Stelle näher beschrieben wird.A begin-array (left square bracket) as in section 2.3 of the JSON RFC, followed by an array record for each EII as described further. Wenn mehr als ein EII vorhanden ist, werden die Arraydatensätze durch Trennzeichen (Kommas) voneinander getrennt.If there is more than one EII, there are value-separators (commas) between the array records. Abgeschlossen wird dies durch ein end-Array.All this is followed by an end-array.

Beispiel: Das folgende XML-Element wird einem JSON-Fragment zugeordnet.Example: The following XML element maps to a JSON fragment.

<root type="array"/> <item type="string">aaa</item> <item type="string">bbb</item> </root >

Das JSON-Fragment lautet ["aaa","bbb"]The JSON fragment is ["aaa","bbb"]

Bei der Zuordnung von Arrays von XML zu JSON werden keine Leerräume (ws) erzeugt, und bei der Zuordnung von JSON zu XML werden Leerräume ignoriert.Whitespace (ws) is never generated on XML to JSON mapping for arrays and is ignored on JSON to XML mapping.

Beispiel: Ein JSON-Fragment.Example: AJSON fragment.

[ "aaa", "bbb"][ "aaa", "bbb"]

Das XML-Element, das ihm zugeordnet wird.The XML element that it maps to.

<root type="array"/> <item type="string">aaa</item> <item type="string">bbb</item> </root >

Memberdatensätze werden wie folgt verarbeitet:Member Records work as follows:

  • Das [local name]-Element des inneren Elements wird entsprechend Abschnitt 2.2 des JSON RFC dem string-Teil des member zugeordnet.Inner element’s [local name] maps to the string part of the member as defined in section 2.2 of the JSON RFC.

Beispiel: Das folgende Element wird einem JSON-Fragment zugeordnet.Example: The following element maps to a JSON fragment.

<root type="object"/>

<myLocalName type="string">aaa</myLocalName>

</root >

Das folgende JSON-Fragment wird angezeigt:The following JSON fragment is displayed.

{"myLocalName":"aaa"}

  • Bei der Zuordnung von XML zu JSON müssen Zeichen, denen in JSON ein Escapezeichen vorangestellt werden muss, Escapezeichen zugeordnet werden. Alle anderen Zeichen werden Zeichen zugeordnet, denen kein Escapezeichen voransteht.On the XML to JSON mapping, the characters that must be escaped in JSON are escaped, and the others are not escaped. Das Zeichen "/" ist ein Sonderfall. Ihm wird ein Escapezeichen vorangestellt, obwohl dies nicht notwendig ist. (Bei der Zuordnung von JSON zu XML muss ihm kein Escapezeichen vorangestellt werden.)The "/" character, even though it is not a character that must be escaped, is escaped nevertheless (it does not have to be escaped on JSON to XML mapping). Dies ist erforderlich, damit das ASP.NET AJAX-Format für DateTime-Daten in JSON unterstützt wird.This is required to support the ASP.NET AJAX format for DateTime data in JSON.

  • Bei einer Zuordnung von JSON zu XML werden alle Zeichen (einschließlich der Zeichen ohne Escapezeichen, falls erforderlich) zur Bildung eines string-Werts herangezogen, der ein [local name]-Element ergibt.On the JSON to XML mapping, all characters (including the not escaped characters, if necessary) are taken to form a string that produces a [local name].

  • Innere Elemente [children] werden entsprechend dem JSON Type Attribute ebenso wie beim Root JSON Element dem Wert in Abschnitt 2.2 zugeordnet.Inner elements [children] map to the value in section 2.2, according to the JSON Type Attribute just like for the Root JSON Element. Es sind mehrere Schachtelungsebenen von EIIs (einschließlich der Schachtelung innerhalb von Arrays) zulässig.Multiple levels of nesting of EIIs (including nesting within arrays) are allowed.

Beispiel: Das folgende Element wird einem JSON-Fragment zugeordnet.Example: The following element maps to a JSON fragment.

<root type="object">

<myLocalName1 type="string">myValue1</myLocalName1>

<myLocalName2 type="number">2</myLocalName2>

<myLocalName3 type="object">

<myNestedName1 type="boolean">true</myNestedName1>

<myNestedName2 type="null"/>

</myLocalName3>

</root >

Das folgende JSON-Fragment resultiert aus dieser Zuordnung:The following JSON fragment is what it maps to.

{"myLocalName1":"myValue1","myLocalName2":2,"myLocalName3":{"myNestedName1":true,"myNestedName2":null}}

Hinweis

Die vorangehende Zuordnung umfasst keinen XML-Codierungsschritt.There is no XML encoding step in the preceding mapping. Daher unterstützt WCFWCF nur JSON-Dokumente, in denen Schlüsselnamen nur Zeichen enthalten, die auch in XML-Elementnamen zulässig sind.Therefore, WCFWCF only supports JSON documents where all characters in key names are valid characters in XML element names. Beispielsweise wird das JSON-Dokument {"<":"a"} nicht unterstützt, weil < kein gültiger Name für ein XML-Element ist.For example, the JSON document {"<":"a"} is not supported because < is not a valid name for an XML element.

Der umgekehrte Fall (Zeichen, die in XML, aber nicht in JSON zulässig sind) stellt kein Problem dar, weil die vorangehende Zuordnung Schritte für das Voranstellen bzw. Entfernen von Escapezeichen in JSON beinhaltet.The reverse situation (characters valid in XML but not in JSON) does not cause any problems because the preceding mapping includes JSON escaping/unescaping steps.

Arraydatensätze werden wie folgt verarbeitet:Array Records work as follows:

  • [local name] des inneren Elements lautet "item".Inner element’s [local name] is "item".

  • Das [children]-Element des inneren Elements wird entsprechend dem JSON-Attribut ebenso wie beim JSON-Stammelement dem Wert in Abschnitt 2.3 zugeordnet.Inner element’s [children] map to the value in section 2.3, according to the JSON Type Attribute as is does for the Root JSON Element. Es sind mehrere Schachtelungsebenen von EIIs (einschließlich der Schachtelung innerhalb von Objekten) zulässig.Multiple levels of nesting of EIIs (including nesting within objects) are allowed.

Beispiel: Das folgende Element wird einem JSON-Fragment zugeordnet.Example: The following element maps to a JSON fragment.

<root type="array"/>

<item type="string">myValue1</item>

<item type="number">2</item>

<item type="array">

<item type="boolean">true</item>

<item type="null"/>

</item>

</root >

Nachfolgend wird das JSON-Fragment dargestellt.The following is the JSON fragment.

["myValue1",2,[true,null]]

Siehe auchSee Also

JsonReaderWriterFactory
DataContractJsonSerializer
Eigenständige JSON-Serialisierung.Stand-Alone JSON Serialization