Um ein XML-Schema aus einem JSON zu erstellen, konvertiere ich den JSON in XML und verwende dann XmlSchemaInference.InferSchema. Das resultierende Xml-Schema enthält einen Auswahlknoten. Unten finden Sie die xml genereated von JsonWarum <Choice> Knoten wird erstellt, während XmlSchemaInference.InferSchema verwendet?
<RESPONSE_DATA>
<ok>true</ok>
<messages>
<type>message</type>
<subtype>file_share</subtype>
<text>something</text>
<file>
<id>IFD</id>
<created>1468845544</created>
<timestamp>1468845544</timestamp>
</file>
<user>IJSA</user>
<upload>true</upload>
<display_as_bot>false</display_as_bot>
<username><@U1J8V9></username>
<bot_id />
<ts>1468845544.000002</ts>
</messages>
<messages>
<user>U1J98V9</user>
<text>9EK8V9</text>
<type>message</type>
<subtype>group_join</subtype>
<ts>1468472817.000002</ts>
</messages>
<has_more>false</has_more>
</RESPONSE_DATA>
Unterhalb der XmlSchema
<?xml version="1.0" encoding="utf-16"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://tempuri.org" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="RESPONSE_DATA">
<xs:complexType>
<xs:sequence>
<xs:element name="ok" type="xs:boolean" />
<xs:element maxOccurs="unbounded" name="messages">
<xs:complexType>
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element name="type" type="xs:string" />
<xs:element name="subtype" type="xs:string" />
<xs:element name="text" type="xs:string" />
<xs:element name="file">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:string" />
<xs:element name="created" type="xs:unsignedInt" />
<xs:element name="timestamp" type="xs:unsignedInt" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="user" type="xs:string" />
<xs:element name="upload" type="xs:boolean" />
<xs:element name="display_as_bot" type="xs:boolean" />
<xs:element name="username" type="xs:string" />
<xs:element name="bot_id" />
<xs:element name="ts" type="xs:decimal" />
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="has_more" type="xs:boolean" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
mit XmlSchemaInference.InferSchema erzeugt wird, verwende ich TreeNodeCollection alle Knoten des Schema-Elements zu erhalten und verwenden TreeNode.Text die bekommen Name. Treenode.Text für den Auswahlknoten gibt mir den Wert <Choice>
anstelle von choice
und das bricht meinen Code.