Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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
.net WebApi可以';t将XML反序列化为列表_.net_Xml_Serialization_Asp.net Web Api - Fatal编程技术网

.net WebApi可以';t将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”的内容 我尝试将列表更改为具有相同结果的数组 我觉得我只是没有正确

我试图发布一个值列表或数组,这些值被自动反序列化为一个名为RejectModel的复杂对象。当以JSON的形式接收数据时,这非常有效,但当发送XML数据时,自动序列化程序会将rejectionList设置为NULL

我尝试使用默认的Xml序列化程序而不是dataContract序列化程序。这给了我以下错误:

没有MediaTypeFormatter可用于读取“List”1类型的对象 来自媒体类型为“application/xml”的内容

我尝试将列表更改为具有相同结果的数组

我觉得我只是没有正确命名包含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>