【发布时间】:2017-02-09 05:41:42
【问题描述】:
我在一个类中有一个 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);
【问题讨论】:
-
能贴出相关代码吗?
-
@Dennis 更新问题
-
为什么要输出为
<Foo>Elephant</Foo>等等?我查看了 BCL 的XmlSerializer,它将列表中的枚举序列化为<AnimalsEnum>Tiger</AnimalsEnum>,这看起来更正确,而不是重复Foo标签。 -
别怪我,怪ebay!最终是为了 ebay api
-
恐怕,我们这里有两个问题。第一个是默认
RestRequest的序列化程序中的错误。第二个是服务器希望以某种非标准方式序列化请求。恕我直言,两者都可以通过替换默认序列化程序来解决 - 您需要在 BCL 的XmlSerializer之上实现ISerializer,并编写自定义序列化逻辑。然后将您的序列化程序分配给RestRequest.XmlSerializer。
标签: c# xml serialization restsharp