2015-07-10 58 views
1

我正在使用Web Api。Web API Json Deserialise

我有一个类型为A的对象。当我返回一个A类型的列表给我的客户端,然后使用Post方法传回类型A的列表时,JSON序列化和反序列化会自动完成。

因为我想使用我的POST方法传递多个参数,所以我创建了一个包装对象,其中包含我想要传入的每个参数的属性.JSON ser/DeSer负责处理这个包装对象,但如何我是否反序列化代表包装对象内类型A的列表的JSON?

谢谢。

添加的代码:

public class ConfigurationUpdateMessage 
{ 
    public string IpAddress { get; set; } 

    public List<object> Configurations { get; set; } 
} 

Post方法

public string PutUpdateConfigurations(ConfigurationUpdateMessage configMessage) 
    {} 

客户端代码

$scope.UpdateConfigs = function() { 

       $.ajax({ 
        url: 'api/configurations', 
        dataType: "json", 
        type: "PUT", 
        contentType: 'application/json; charset=utf-8', 
        data: JSON.stringify({ IpAddress: "127.0.0.1", Configurations: $scope.configs }), 
        async: true, 
        processData: false, 
        cache: false, 
        success: function (data) { 

        }, 
        error: function (xhr) { 

        } 
       }); 

      }; 

回答

0

PRE:你可以张贴一些代码?

如果您的包装器对象包含与序列化对象的类型相匹配的属性,则模型联编程序应自动将它们反序列化为匹配属性。除非您正在发布的JSON的结构有问题。

+0

我发现这个问题。这是因为我的包装对象的列表被拒绝为列表,我应该宣布它为列表,现在deser会自动处理。谢谢你的帮助。 – ee0jmt

0

您应该在服务器端创建相同的包装类型。

例如:

public class OperationDTO 
{ 
    public string Parameter1 { get; set; } 
    public int Parameter2 { get; set; } 
    public IEnumerable<A> MyList { get; set; } //List<A> will also work too 
} 

你的网络API的行动应该是这样的:

[HttpPost] 
public IHttpActionResult Operation([FromBody] OperationDTO) 
{ 
    //... 
}