Search code examples
c#xsdxml-serializationdatacontractserializerdatacontract

Is there a xsd file for "http://schemas.microsoft.com/2003/10/Serialization/" namespace?


I want to create / infer schema for data-contract serialized classes.

When I use [DataContract(IsReference = true)] attribute the serializer is injecting attributes z:Id="i2" and z:Ref="i2" to reference the same object instances.
Both attributes are from http://schemas.microsoft.com/2003/10/Serialization/ namespace.

Questions:

  • Is there a xsd schema file for the namespace used by serializer which I could import into my schema?
  • For now I am defining those attributes as a xs:ID / xs:IDREF pair. Is that correct?

Thanks in advance.


Solution

  • The xsd schema is supposed to described here - look for the section Data Contract Serialization Schema. However, if you do look for your attributes, you will not find them in there - documentation bug!

    To get the full schema, take a look at this and this - inside the WSDL types, you'll find the correct schema. As for your assumption regarding the attributes, yes, you are correct.

    I am inlining it here, just in case:

    <?xml version="1.0"?>
    <xs:schema xmlns:tns2="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:element name="anyType" nillable="true" type="xs:anyType"/>
        <xs:element name="anyURI" nillable="true" type="xs:anyURI"/>
        <xs:element name="base64Binary" nillable="true" type="xs:base64Binary"/>
        <xs:element name="boolean" nillable="true" type="xs:boolean"/>
        <xs:element name="byte" nillable="true" type="xs:byte"/>
        <xs:element name="dateTime" nillable="true" type="xs:dateTime"/>
        <xs:element name="decimal" nillable="true" type="xs:decimal"/>
        <xs:element name="double" nillable="true" type="xs:double"/>
        <xs:element name="float" nillable="true" type="xs:float"/>
        <xs:element name="int" nillable="true" type="xs:int"/>
        <xs:element name="long" nillable="true" type="xs:long"/>
        <xs:element name="QName" nillable="true" type="xs:QName"/>
        <xs:element name="short" nillable="true" type="xs:short"/>
        <xs:element name="string" nillable="true" type="xs:string"/>
        <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte"/>
        <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt"/>
        <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong"/>
        <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort"/>
        <xs:element name="char" nillable="true" type="tns2:char"/>
        <xs:simpleType name="char">
            <xs:restriction base="xs:int"/>
        </xs:simpleType>
        <xs:element name="duration" nillable="true" type="tns2:duration"/>
        <xs:simpleType name="duration">
            <xs:restriction base="xs:duration">
                <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?"/>
                <xs:minInclusive value="-P10675199DT2H48M5.4775808S"/>
                <xs:maxInclusive value="P10675199DT2H48M5.4775807S"/>
            </xs:restriction>
        </xs:simpleType>
        <xs:element name="guid" nillable="true" type="tns2:guid"/>
        <xs:simpleType name="guid">
            <xs:restriction base="xs:string">
                <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}"/>
            </xs:restriction>
        </xs:simpleType>
        <xs:attribute name="FactoryType" type="xs:QName"/>
        <xs:attribute name="Id" type="xs:ID"/>
        <xs:attribute name="Ref" type="xs:IDREF"/>
    </xs:schema>