Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将XML发布到webapi仅绑定[FromBody]请求模型上的非集合属性_C#_Asp.net_.net_Asp.net Web Api - Fatal编程技术网

C# 将XML发布到webapi仅绑定[FromBody]请求模型上的非集合属性

C# 将XML发布到webapi仅绑定[FromBody]请求模型上的非集合属性,c#,asp.net,.net,asp.net-web-api,C#,Asp.net,.net,Asp.net Web Api,(初始问题已解决,但在下面的更新部分中,我对我所做的工作的原因有疑问) 我们有一个asp.net webApi项目,它有一个单一的POST操作,以前只需要接受一个格式为JSON的请求,并且会响应accept头所说的任何内容(无论是application/xml还是application/JSON) 现在,POST需要能够接受XML作为请求。这应该只是将内容类型设置为application/xml的问题,一切都应该很好 然而,模型绑定不是很有效,它部分有效,但不是全部有效 以下是该模型的简化版本:

(初始问题已解决,但在下面的更新部分中,我对我所做的工作的原因有疑问)

我们有一个asp.net webApi项目,它有一个单一的POST操作,以前只需要接受一个格式为JSON的请求,并且会响应accept头所说的任何内容(无论是application/xml还是application/JSON)

现在,POST需要能够接受XML作为请求。这应该只是将内容类型设置为application/xml的问题,一切都应该很好

然而,模型绑定不是很有效,它部分有效,但不是全部有效

以下是该模型的简化版本:

    [DataContract(Namespace = "")]
    public class PostModel
    {
        [DataMember(Name = "Identifier", Order = 0)]
        [Required]
        public string Identifier { get; set; }

        [DataMember(Name = "ReturnNullItems", Order = 1)]
        public bool? ReturnNullItems { get; set; }

        [DataMember(Name = "RequestedItems", Order = 2)]
        [Required]
        public List<string> RequestedItems { get; set; }

        [DataMember(Name = "Mileage", Order = 3)]
        public int Mileage { get; set; }
    }
下面也有这样的评论:

//var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
//xml.UseXmlSerializer = true;
我对上面的两行进行了评论,瞧,它是有效的

我猜我在告诉反序列化程序使用
System.Net.Http.Formatting.XmlMediaTypeFormatter
反序列化请求主体。我还猜想,如果没有一些额外的信息(我不知道如何提供),默认的DataContractSerialiser无法很好地用分层xml反序列化xml


所以现在它起作用了,但我只能猜测如何和/或为什么。任何人都能给我指出正确的方向,或者让我知道为什么我所做的已经解决了这个问题吗?

尝试将属性
[XmlArray(ElementName=“RequestedItems”)]
添加到
PostModel中的
RequestedItems
属性中class@MattG谢谢你;没有解决我的问题,但给了我一个应该去哪里看的提示。更新了我上面的问题。
<PostModel>
   <Identifier>ya05fom</Identifier>
   <ReturnNullItems>false</ReturnNullItems>
   <RequestedItems>
      <string>EngineCapacity</string>
      <string>FuelType</string>
      <string>ForwardGears</string>
      <string>Transmission</string>   
   </RequestedItems>
   <Mileage>20000</Mileage>
</PostModel>    
GlobalConfiguration.Configuration.Formatters.Add(new System.Net.Http.Formatting.XmlMediaTypeFormatter());
//var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
//xml.UseXmlSerializer = true;