2

ユーザーがメタデータを投稿できるようにする ASP.NET Web API サービスを開発しています。

ユーザーが投稿するデータ コントラクトの 1 つで、ユーザーは独自のカスタム メタデータを XML 形式で投稿できるはずです。これは例です:

<Delivery>
    <Type>Direct</Type>
    <Time>12:00:01</Time>
    <Format>Segmented</Format>
    <CustomMetadata>
        <ClientReference>R46375683</ClientReference>
        <Contact>Me@There.com</Contact>
    </CustomMetadata>
</Delivery>

ただし、適切に逆シリアル化するデータ コントラクトを作成するのに問題があります。CustomMetadata ノードの場合、次のものがあります。

[DataMember(EmitDefaultValue=false)]
public XmlNode CustomMetadata { get; set; }

逆シリアル化されると、例外が発生します。

「コレクション型 'System.Xml.XmlNode' は、型 'System.Object' のパラメーターを持つ有効な Add メソッドがないため、逆シリアル化できません。」

XmlNode に何かを「追加」しようとしている理由が完全にはわかりませんが、何らかの理由で失敗しています。別の型に逆シリアル化するなど、この種のことを行うための代替手段はありますか? 文字列にデシリアライズしようとしましたが、例外も発生しました。

4

2 に答える 2

3

データ コントラクトのシリアル化では、プリミティブといくつかの特殊な型のみがサポートされます。XmlNode の代わりに XmlElement を使用する必要があります。

試す:

[DataMemeber]
public XmlElement CustomMetadata { get; set; }

http://msdn.microsoft.com/en-us/library/ms733127.aspxを参照してください。

于 2013-01-24T17:37:57.473 に答える