2015-07-10 66 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) 
{ 
    //... 
}