2011-08-03 16 views
1

XMLシリアライザ(DataContractシリアライザではありません)によって生成されたXMLを返すREStful WCFサービスを開発中です。WCF:ルート要素のXmlSerialization属性が無視されました

ほとんどのオブジェクトは正しくフォーマットされていますが、返されるもののルート要素は自分のXMLシリアル化属性を無視しているようです。

たとえば、リソース/accounts/は、自分のAccountListクラス(それ自体、シリアル化する必要があるいくつかのプロパティを持つ自分のObjectList<T>クラスのサブクラス)のXMLシリアル表現を返します。しかし、私は私が望む結果を得ていない。ここで

は私のコードです:

[XmlRoot("accounts")] 
public class AccountList : ObjectList<Account> { 
} 

public class ObjectList<T> : List<T> { 
    [XmlAttribute("foo")] 
    public Int32 FooProperty { get; set; } 
} 

[OperationContract] 
[WebGet(UriTemplate="/accounts")] 
public AccountList GetAccounts() { 
    return new AccountList() { 
     new Account("bilbo baggins"), 
     new Account("steve ballmer") 
    }; 
} 

そして、これは、Webサービスによって返されるものです。

<arrayOfAccount> 
    <Account> 
     <name>biblo baggins</name> 
    </Account> 
    <Account> 
     <name>steve ballmer</name> 
    </Account> 
</arrayOfAccount> 

だから、主な問題はAccountListクラスの私の希望シリアライズは無視されていることです"Account"は小文字で "name"プロパティ(これらのプロパティで[XmlElement( "name")]を使用していて、小文字であるようにする方法を知りたいです。

ありがとう!これは動作しますが、この方法には以下の属性を追加しようとします

答えて

0

ない100%を確認してください。

[return:XmlArray("accounts")] 
[return:XmlArrayItem("account")] 

更新:

は、上記が原因で動作しない[リターン:*]ではない属性を取得拾った。仕事をする二つのオプション:

あなたはAccountListリストを含有させると、そのように、そこに[のXmlElement(「アカウントを」)]を使用することができます

[XmlRoot("accounts")] 
public class AccountList : ObjectList<Account> { 
    [XmlElement("account")] 
    public List<Account> Accounts { get; set; } 
} 

public class ObjectList<T> {//: List<T> { 
    [XmlAttribute("foo")] 
    public Int32 FooProperty { get; set; } 
} 

を代わりに、あなたは様々な気にしない場合XmlArray]と[XmlarrayItem]を使用することができます:

[XmlRoot("response")] 
public class GetAccountResponse { 
    [XmlArray("accounts"), XmlArrayItem("account")] 
    public AccountList Accounts { get; set; } 
} 
+0

いいえ、それはまったく機能しませんでした。 – Dai

+0

ええ、[戻り値:*]属性はあまりにも悪くなっていないようです。 – alexdej

関連する問題