Xml десериализация дает неожиданное значение по умолчанию, когда оно должно быть пустым - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь десериализовать файл xml, но получаю неожиданные значения по умолчанию. В приведенном ниже примере я не понимаю, почему я получаю SESH в поле ShrtSellgInd под сложным типом SecuritiesTransactionIndicator2__1

это поле определено <xs:element name="ShrtSellgInd" type="Side5Code" minOccurs="0"> в XSD, но я не вижу значение по умолчанию в определении типа:

<xs:simpleType name="Side5Code">
        <xs:annotation>
            <xs:documentation source="Name" xml:lang="EN">Side5Code</xs:documentation>
            <xs:documentation source="Definition" xml:lang="EN">Side taken by a party on an order.</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:enumeration value="SESH">
                <xs:annotation>
                    <xs:documentation source="Name" xml:lang="EN">SellShort</xs:documentation>
                    <xs:documentation source="Definition" xml:lang="EN">An order to sell a security that the seller does not own; a sale effected by delivering a security borrowed by, or for the account of, the seller. Can only be executed on a plus or zero plus tick.</xs:documentation>
                </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="SELL">
                <xs:annotation>
                    <xs:documentation source="Name" xml:lang="EN">Sell</xs:documentation>
                    <xs:documentation source="Definition" xml:lang="EN">Order is sell driven.</xs:documentation>
                </xs:annotation>
            </xs:enumeration>

здесь определение Xsd: https://www.fca.org.uk/publication/forms/mdp-transaction-report-data-extract-schema-v6.xsd

Код c#, используемый для десериализации с использованием XmlSerializer:

XNamespace ns = "http://mdp.fca.org.uk/gb_extra";
string docname = (ns + "Document").LocalName;
XmlSerializer serializer = new XmlSerializer(typeof(Document));
Document document = (Document)serializer.Deserialize(sr);

Xml пример с пустым <AddtlAttrbts></AddtlAttrbts> и дающим SE SH

GB_EXTRA_0.0.6.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://mdp.fca.org.uk/gb_extra"><FinInstrmRptgTxRpt>
<Tx><New><TxId>Test</TxId><ExctgPty>Test</ExctgPty><InvstmtPtyInd>true</InvstmtPtyInd><SubmitgPty>Test</SubmitgPty><Buyr><AcctOwnr><Id><LEI>Test</LEI></Id></AcctOwnr></Buyr><Sellr><AcctOwnr><Id><LEI>Test</LEI></Id><CtryOfBrnch>GB</CtryOfBrnch></AcctOwnr><DcsnMakr><LEI>Test</LEI></DcsnMakr></Sellr><OrdrTrnsmssn><TrnsmssnInd>true</TrnsmssnInd><TrnsmttgSellr>Test</TrnsmttgSellr></OrdrTrnsmssn><Tx><TradDt>2019-10-13T06:46:22.852000Z</TradDt><TradgCpcty>AOTC</TradgCpcty><Qty><NmnlVal Ccy="USD">200000.00000</NmnlVal></Qty><Pric><Pric><Pctg>100.33360000</Pctg></Pric></Pric><NetAmt>8275.20000</NetAmt><TradVn>XOFF</TradVn></Tx><FinInstrm><Id>XSXXXXXXXXX</Id></FinInstrm><InvstmtDcsnPrsn><Prsn><CtryOfBrnch>GB</CtryOfBrnch><Othr><Id>Test</Id><SchmeNm><Prtry>CONCAT</Prtry></SchmeNm></Othr></Prsn></InvstmtDcsnPrsn><ExctgPrsn><Prsn><CtryOfBrnch>GB</CtryOfBrnch><Othr><Id>Test</Id><SchmeNm><Prtry>CONCAT</Prtry></SchmeNm></Othr></Prsn></ExctgPrsn><AddtlAttrbts></AddtlAttrbts></New><Feedback><Sts>ACPT</Sts></Feedback><SubmDt>2019-10-14T10:39:11.000Z</SubmDt></Tx>
</FinInstrmRptgTxRpt></Document>
...