0

.net WebApiを使用してWebサービスを作成していますが、プロパティの1つが派生クラスのIEnumerableである場合に、クラスをXMLにシリアル化する際に問題が発生します。私はknownTypeベットを追加しようとしましたが、次のエラーが発生します:

「エラー1属性'KnownType'は、この宣言タイプでは無効です。'class、struct'宣言でのみ有効です。」

JSONシリアル化は完璧に機能しますが、XMLの場合は次のようになります。

<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
The 'ObjectContent`1' type failed to serialize the response body for content type 'application/xml; charset=utf-8'.
</ExceptionMessage>
<ExceptionType>System.InvalidOperationException</ExceptionType>
<StackTrace/>
<InnerException>
<Message>An error has occurred.</Message>
<ExceptionMessage>
Type 'test.order' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute. If the type is a collection, consider marking it with the CollectionDataContractAttribute. See the Microsoft .NET Framework documentation for other supported types.
</ExceptionMessage>
....

派生クラスの例

public class orderDetailBase
{
    public int sequence { get; set; }
    //.... more properties
}

public class onlineOrderDetail : orderDetailBase
{
    public string ip { get; set; }
    //.... more properties
}

public class inStoreOrderDetail : orderDetailBase
{
    public string storeAddress { get; set; }
    //.... more properties
}

シリアルジーへのクラス

public class order
{
    public int orderNumber{ get; set; }
    //..... more
    public IEnumerable<orderDetailBase> { get; set; }   // Serializing this causes issues

この問題を回避する方法はありますか?ありがとう!

4

1 に答える 1

1

'orderDetailBase'クラスを次のように変更してみてください。

[DataContract]
[KnownType(typeof(onlineOrderDetail))]
[KnownType(typeof(inStoreOrderDetail))]
public class orderDetailBase
{
   [DataMember]
   public int sequence { get; set; }
于 2013-03-18T19:02:23.120 に答える