Unter ganz bestimmten Voraussetzungen darf das <To>
-Tag eines Mappings über die Angabe des Attributs xsi:nul="true"
genullt werden.
Die Intention dahinter ist, dass der Inhalt eines durch <From>
ermittelten Wertes gar nicht selbst in ein Zielobjekt geschrieben sondern an ein Mehrfachwert-Mapping zurückgegeben und weiterverarbeitet werden soll.
Dies setzt weiterhin voraus, dass in der Mapping-Sammlung nur dieses eine Mapping mit null als <To>
existiert.
Beispiel:
Die Liste der Branchen in der JSON-Antwort eines Webservices soll in der deutschen Übersetzung und kommagetrennt in das Feld SearchNames
übernommen werden.
Nehmen wir folgende eingehende JSON-Struktur an:
{
"Industry":
[
{
"Language_de": "Banken",
"Language_en": "Banking"
},
{
"Language_de": "Chemie",
"Language_en": "Chemical Industry"
}
]
}
Das Mapping, das wir für die Aufgabe benötigen, sähe dann wie folgt aus:
<MappingTemplate id="IndustriesMapping" sourceType="Newtonsoft.Json.Linq.JToken" targetType="System.String">
<Mapping>
<From>$.Language_de</From>
<To xsi:nil="true"/>
</Mapping>
</MappingTemplate>
…
<InboundMappings>
<MultiValueMapping>
<From>$.Industry</From>
<To>SearchNames</To>
<Transform>[This].BAImplode(ToStr([This]), ', ')</Transform>
<RowMappings targetRowType="System.String">
<TemplateMapping ref="IndustriesMapping"/>
</RowMappings>
</MultiValueMapping>
…
Erklärung:
Das Mehrfachwert-Mapping ist durch seine Position (InboundMappings) automatisch ein JsonPath-Mapping.
Es definiert in <From>
, dass es das Property „$.Industry“ mappen möchte, welches in der eingehenden JSON-Struktur ein Array von Objekten ist.
<RowMappings>
gibt an, mit welcher Mapping-Vorlage jedes dieser Objekte verarbeitet werden soll, und dass der erwartete Ergebnistyp pro Industry-Objekt „String“ ist. Die verwendete Mapping-Vorlage verwendet nur ein Mapping, dessen <To>
-Tag null ist. Das bedeutet, dass der von <From>
ermittelte Wert ohne weitere Transformation und als String (wie angegeben) an das Mehrfachwert-Mapping zurückgegeben wird.
Dadurch entsteht nach der Ermittlung als <From>
-Wert im Mehrfachwert-Mapping ein String-Array, welches in diesem Fall zwei Werte, nämlich „Banken“ und „Chemie“ beinhaltet.
Die anschließende Transformation des Mehrfachwert-Mappings wandelt dieses Array in einen String um, wobei die Elemente mit Komma-Leerzeichen getrennt aneinandergereiht werden.