我在一个类中有一个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);
答案 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
只能序列化公共类型。