none
WebApi 使用System.Xml.Serialization.XmlSerializer序列化, RRS feed

  • 问题

  • webapi2中,通过

     
                config.Formatters.XmlFormatter.UseXmlSerializer = true;//如果使用System.Xml.Serialization.XmlSerializer,则会出现接收XML信息时无效的问题。
                config.Formatters.XmlFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/xml"));
                config.Formatters.XmlFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/xml"));

    设置了使用System.Xml.Serialization.XmlSerializer去序列化对象,一直以来都是用户取的时候要求XML,所以,一直没有出问题。今天需要推送的时候推送XML格式,发现一直报

    没有可用的 MediaTypeFormatter,无法从媒体类型为“application/xml”的内容中读取类型为“IEnumerable`1”的对象。

    如果将config.Formatters.XmlFormatter.UseXmlSerializer = false;就可以接收。因为业务需要,XML序列化的时候不能用默认进行序列,所以,config.Formatters.XmlFormatter.UseXmlSerializer必须设置为true。

    真不知道怎么处理了……

    2016年9月29日 10:04

答案


  • Hi  EnSleeP,

    Web API 默认支持 JSON 和XML 返回格式。 从你的描述,用户都是从API 接受XML的格式数据。 但是现在发现推送XML 格式数据就会报错。

    所以: 推送数据这个动作 指什么?

    1: 用户 从API 获取XML 数据?

    如果是这样,之前是正常,为什么突然不能。你可能需要检查返回的数据。

    2: 发送XML 格式数据到Web API?

    如果是这样,你需要修改你的API 方法,保证正常接收XML数据并解析。

    下面方法你可以参考:

    Controller Action:

    [HttpPost]
    public string ReturnXmlDocument(HttpRequestMessage request)
    {
        var doc = new XmlDocument();
        doc.Load(request.Content.ReadAsStreamAsync().Result);
        return doc.DocumentElement.OuterXml;
    }


    客户端通过 Httpclient 发送XML 数据。

    var content = new StringContent("<root><value>Hello World</value></root>", Encoding.UTF8,"text/xml");                        
    var client = new HttpClient();
    var result = client.PostAsync("http://localhost/Api/ReturnXmlDocument", content).Result;
     


    也可以序列化Object为XML,并发送。

    var client = new HttpClient();
    var album = new Album() { ID = "SD001" };
    var result = client.PostAsync<Album>("http://localhost/Api/ReturnXmlDocument",  album, new XmlMediaTypeFormatter())  .Result;

    如果我有理解不对的地方,可以及时指出。你也可以分享更多的信息或者代码来帮助我们分析问题。

    Best Regards,

    Yohann Lu

    2016年9月30日 8:47

全部回复

  • 你application/xml的数据格式是怎么样的?是否正常?

    ASP.NET Forum
    StackOverFlow
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    2016年9月29日 10:11

  • Hi  EnSleeP,

    Web API 默认支持 JSON 和XML 返回格式。 从你的描述,用户都是从API 接受XML的格式数据。 但是现在发现推送XML 格式数据就会报错。

    所以: 推送数据这个动作 指什么?

    1: 用户 从API 获取XML 数据?

    如果是这样,之前是正常,为什么突然不能。你可能需要检查返回的数据。

    2: 发送XML 格式数据到Web API?

    如果是这样,你需要修改你的API 方法,保证正常接收XML数据并解析。

    下面方法你可以参考:

    Controller Action:

    [HttpPost]
    public string ReturnXmlDocument(HttpRequestMessage request)
    {
        var doc = new XmlDocument();
        doc.Load(request.Content.ReadAsStreamAsync().Result);
        return doc.DocumentElement.OuterXml;
    }


    客户端通过 Httpclient 发送XML 数据。

    var content = new StringContent("<root><value>Hello World</value></root>", Encoding.UTF8,"text/xml");                        
    var client = new HttpClient();
    var result = client.PostAsync("http://localhost/Api/ReturnXmlDocument", content).Result;
     


    也可以序列化Object为XML,并发送。

    var client = new HttpClient();
    var album = new Album() { ID = "SD001" };
    var result = client.PostAsync<Album>("http://localhost/Api/ReturnXmlDocument",  album, new XmlMediaTypeFormatter())  .Result;

    如果我有理解不对的地方,可以及时指出。你也可以分享更多的信息或者代码来帮助我们分析问题。

    Best Regards,

    Yohann Lu

    2016年9月30日 8:47