.net WebApi可以';t将XML反序列化为列表
我试图发布一个值列表或数组,这些值被自动反序列化为一个名为RejectModel的复杂对象。当以JSON的形式接收数据时,这非常有效,但当发送XML数据时,自动序列化程序会将rejectionList设置为NULL 我尝试使用默认的Xml序列化程序而不是dataContract序列化程序。这给了我以下错误: 没有MediaTypeFormatter可用于读取“List”1类型的对象 来自媒体类型为“application/xml”的内容 我尝试将列表更改为具有相同结果的数组 我觉得我只是没有正确命名包含XML的元素。如有任何建议,将不胜感激.net WebApi可以';t将XML反序列化为列表,.net,xml,serialization,asp.net-web-api,.net,Xml,Serialization,Asp.net Web Api,我试图发布一个值列表或数组,这些值被自动反序列化为一个名为RejectModel的复杂对象。当以JSON的形式接收数据时,这非常有效,但当发送XML数据时,自动序列化程序会将rejectionList设置为NULL 我尝试使用默认的Xml序列化程序而不是dataContract序列化程序。这给了我以下错误: 没有MediaTypeFormatter可用于读取“List”1类型的对象 来自媒体类型为“application/xml”的内容 我尝试将列表更改为具有相同结果的数组 我觉得我只是没有正确
申报后。接受拒绝模型的列表
public HttpResponseMessage Post(List<RejectModel> rejectionList)
{
if (rejectionList == null)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "The request was empty, malformed, or did not include an array of values.");
}
else if (rejectionList.Rejections.Length == 0)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "An empty array was passed.");
}
}
我多次请求尝试中的一次。我试过很多“拒绝列表”的标签名。我在请求头中包括“Accept:application/xml”
<?xml version="1.0" encoding="UTF-8"?>
<rejectList>
<RejectModel>
<LeadId>10102085</LeadId>
<PropertyId>60278</PropertyId>
</RejectModel>
</rejectList>
10102085
60278
永不失败。挣扎两天,发布一个问题,在30分钟内找到答案
使用DataContractSerializer(WebAPI的默认xml序列化程序)时,必须在xml请求和对象的DataContract中包含命名空间。您还需要将xml集合命名为“ArrayOf…”,即使您正在接受一个列表。下面是一个例子,按照我原来问题的结构:
[DataContract(Namespace = "http://blahblah.org/2013/Some.Namespace.You.Defined")]
public class RejectList{
List<RejectModel> list{
get;
set;
}
}
<ArrayOfRejectModel xmlns="http://blahblah.org/2013/Some.Namespace.You.Defined">
<RejectModel> ... </RejectModel>
<RejectModel> ... </RejectModel>
</ArrayOfRejectModel>
[DataContract(命名空间=”http://blahblah.org/2013/Some.Namespace.You.Defined")]
公共类拒绝列表{
列表{
得到;
设置
}
}
您是否可以使用将此问题发布到方法中的代码更新问题?
[DataContract(Namespace = "http://blahblah.org/2013/Some.Namespace.You.Defined")]
public class RejectList{
List<RejectModel> list{
get;
set;
}
}
<ArrayOfRejectModel xmlns="http://blahblah.org/2013/Some.Namespace.You.Defined">
<RejectModel> ... </RejectModel>
<RejectModel> ... </RejectModel>
</ArrayOfRejectModel>
[DataContract(Namespace = "")]
public class RejectList{
List<RejectModel> list{
get;
set;
}
}
<ArrayOfRejectModel>
<RejectModel> ... </RejectModel>
<RejectModel> ... </RejectModel>
</ArrayOfRejectModel>