Restsharp - 如何将枚举列表序列化为字符串

时间:2017-02-09 05:41:43

标签: c# xml serialization restsharp

我在一个类中有一个List<AnimalsEnum> Foo属性,我使用RestSharp为请求正文序列化为XML。我希望输出为:

<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);

1 个答案:

答案 0 :(得分:0)

您可以使用RestSharp的内置DotNetXmlSerializer来使Microsoft XmlSerializer进行实际的序列化。然后,您可以使用XML serialization attributes指定List<AnimalsEnum> Bar public class Bar { public string Name { get; set; } [System.Xml.Serialization.XmlElement] public List<AnimalsEnum> Foo { get; set; } public enum AnimalsEnum { Tiger, Elephant, Monkey } } 应该在没有外部容器元素的情况下序列化,方法是应用[XmlElement]

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必须公开,因为docker run --name postgres -e POSTGRES_DATABASE=keycloak -e POSTGRES_USER=keycloak -e POSTGRES_PASSWORD=password -e POSTGRES_ROOT_PASSWORD=password -d postgres 只能序列化公共类型。