2013-01-12 71 views
0

我使用XmlSerializer代替DataContractSerializer在我的ASP.NET Web API項目,並定義爲串行化的ASP.NET Web API

響應對象返回對象

public class MyResponse 
{ 
    public string Name {get;set;} 

    public CustomField<string> Username {get;set;} 

    public CustomField<float?> Score {get;set;} 
} 

自定義字段

public class CustomField<T> 
{ 
    public T Value {get;set;} 

    public long LastModified {get;set;} 

} 

我想生成一個XML響應爲

<MyResponse> 
<FirstName>ABC</FirstName> 
<Username lastModified="1234">XYZ</Username> 
<Score lastModified="45678">12002</Score> 
</MyResponse> 

的ASP.NET Web API返回JSON對象(我知道,發生這種情況時XmlSerialization無法正常工作),當我裝飾CustomField類作爲

public class CustomField<T> 
{ 
    [XmlText] 
    public T Value {get;set;} 

    [XmlAttribute] 
    public long LastModified {get;set;} 
} 

我怎樣才能得到想要的XML響應?

+0

這可能會幫助您找出問題http://www.bizcoder.com/index.php/2012/08/10/troubleshooting-serialization-problems-in-web-api/ –

+0

只需檢查,你有您的XML請求中包含Accept標頭?如果請求沒有請求特定的內容類型,則JSON是默認格式。 –

+0

是的,先生。我確實有正確的標題 – frictionlesspulley

回答

0

好吧,我想我知道發生了什麼事。

如果您嘗試運行

new XmlSerializer(typeof(MyResponse)) 

你會得到這樣的錯誤:

System.InvalidOperationException:類型System.Nullable`1 [System.Single]中無法序列成員 '值'。 XmlAttribute/XmlText不能用於編碼複雜類型。

所以問題是你有一個'浮動'類型的字段?作爲[XmlText]。 [XmlText]只能應用於基元,並且它看起來不像XmlSerializer識別'浮點'?作爲一個原始的。如果你使用'float'而不是'float?',那麼一切看起來都是正確的。如果您想表明有時沒有分數,您可能需要將分數設置爲空而不是分數值爲空。

希望有所幫助。