2017-02-09 82 views
0

我有一個List<AnimalsEnum> Foo屬性,我正在使用RestSharp序列化爲XML的請求正文。我想輸出是:Restsharp - 如何將枚舉列表序列化爲字符串

<rootNode> 
    ... existing content... 
    <Foo>Elephant</Foo> 
    <Foo>Tiger</Foo> 
    .... more content 

相反,相關序列的一部分,我有

<Foo> 
    <AnimalsEnum /> 
    <AnimalsEnum /> 
</Foo> 

我想枚舉值轉換爲字符串,並刪除容器元素會自動添加。這可能與RestSharp?我認爲這可能有屬性,但顯然不是。我將不得不用自定義編碼器來自己調整這個輸出嗎?

代碼很難張貼,但與例如保持:

class Bar 
{ 
    public string Name{get;set;} 
    public List<AnimalsEnum> Foo{get;set;} 
    public enum AnimalsEnum {Tiger,Elephant,Monkey} 
} 

和序列化到一個請求

var req = new RestSharp.RestRequest(RestSharp.Method.POST); 
req.RequestFormat = RestSharp.DataFormat.Xml; 
req.AddQueryParameter("REST-PAYLOAD", ""); 
req.AddXmlBody(myBar); 
+0

你能發佈相關的代碼嗎? – Dennis

+0

@丹尼斯更新了問題 – user3791372

+0

爲什麼你想輸出爲'大象'等?我研究過BCL的'XmlSerializer',它將列表中的枚舉序列化爲' Tiger',這看起來更加正確,而不是重複'Foo'標籤。 – Dennis

回答

0

您可以使用內置的RestSharp的DotNetXmlSerializer使微軟的XmlSerializer做實際的序列化。然後你可以使用XML serialization attributes通過應用[XmlElement]指定的BarList<AnimalsEnum>應該沒有外容器元素被序列化:

public class Bar 
{ 
    public string Name { get; set; } 
    [System.Xml.Serialization.XmlElement] 
    public List<AnimalsEnum> Foo { get; set; } 
    public enum AnimalsEnum { Tiger, Elephant, Monkey } 
} 

然後,在進行請求時,這樣做:

var req = new RestSharp.RestRequest(RestSharp.Method.POST); 

// Use XmlSerializer to serialize Bar 
req.XmlSerializer = new RestSharp.Serializers.DotNetXmlSerializer(); 

req.RequestFormat = RestSharp.DataFormat.Xml; 
req.AddQueryParameter("REST-PAYLOAD", ""); 
req.AddXmlBody(myBar); 

注意Bar必須公開,因爲XmlSerializer只能序列化公共類型。

相關問題