Asp.net web api Web API FormURLEncoded媒体类型格式化程序不适用于复杂类型

Asp.net web api Web API FormURLEncoded媒体类型格式化程序不适用于复杂类型,asp.net-web-api,model-binding,mediatypeformatter,Asp.net Web Api,Model Binding,Mediatypeformatter,我在控制器的PUT操作中定义了以下ComplexType,如下所示: [DataContract(Namespace = "http://schemas.abc.com/formurl", Name = "ComplexData")] public class ComplexData { [DataMember] public string Name { get; set; } [DataMember] public Int32 ID { get;

我在控制器的PUT操作中定义了以下ComplexType,如下所示:

[DataContract(Namespace = "http://schemas.abc.com/formurl", Name = "ComplexData")]
public class ComplexData {
    [DataMember]         public string Name { get; set; }
    [DataMember]         public Int32 ID { get; set; }
    [DataMember]         public DataExchangeList DataExchange { get; set; }
}

[DataContract(Namespace = "http://schemas.abc.com/formurl", Name = "DataItem")]
public class DataItem {
    [DataMember]         public string Name { get; set; }
    [DataMember]         public string Value { get; set; }
}

[CollectionDataContract(Namespace = "http://schemas.abc.com/formurl", Name = "DataExchange")]
public class DataExchangeList : List<DataItem> {
}
仅返回数据的响应显示集合为空:

  <ComplexData xmlns:i="http://www.w3.org/2001/XMLSchema-instance"   xmlns="http://schemas.abc.com/formurl">
    <DataExchange />
    <ID>123456789</ID>
    <Name>Complex</Name>
  </ComplexData>

123456789
复杂的
这不应该与FormUrlEncodedMediaTypeFormatter一起使用吗

我传递收集数据的方式是否有任何问题,如下所示

数据交换[0][Name]=数据和数据交换[0][Value]=ComplexType

如有任何建议,将不胜感激

谢谢


Sid

这有什么问题?您得到的回答是正确的??可能是Jon的重复,定制模型绑定解决方案看起来很棒。但是,如果我理解正确的话,它会强制传递给控制器的所有数据采用查询字符串格式。我的客户端仍然需要在Web API中支持JSON和XML媒体类型格式化程序。这个问题只是为了解决内容类型为application/x-www-form-urlencoded时的绑定问题。我想我要看的是定制默认的FormUrlEncodedMediaTypeFormatter来支持复杂的集合模型?我也有类似的问题
  PUT http://localhost:53954/api/values HTTP/1.1
  User-Agent: Fiddler
  Content-Type: application/x-www-form-urlencoded
  Accept: application/xml
  Host: localhost:53954
  Content-Length: 106
  Id=123456789&Name=Complex&DataExchange[0][Name]=Data&DataExchange[0][Value]=ComplexType
  <ComplexData xmlns:i="http://www.w3.org/2001/XMLSchema-instance"   xmlns="http://schemas.abc.com/formurl">
    <DataExchange />
    <ID>123456789</ID>
    <Name>Complex</Name>
  </ComplexData>