2014-09-22 12 views
6

Tôi đang gửi một Json Array từ ứng dụng web của khách hàng tới asp.net webapi. Ví dụ,Mảng JSON đang chuyển đổi thành danh sách chung, nhưng không chuyển đổi thành bộ sưu tập chung. Tại sao?

{ 
    "SurveyId":3423, 
    "CreatorId":4235, 
    "GlobalAppId":34, 
    "AssociateList":[ 
     {"AssociateId":4234}, 
     {"AssociateId":43}, 
     {"AssociateId":23423}, 
     {"AssociateId":432} 
    ], 
    "IsModelDirty":false, 
    "SaveMode":null 
} 

đây Danh sách liên kết là một JSON Array, Thông thường nó sẽ tự động serialize vào một danh sách <> đối tượng.

Sử dụng mã dưới đây, tôi đang đăng đối phó với WebAPI

public IEnumerable<Associate> Post(ResponseStatus responseStatus) 
{ 
    return this.responsestatusrepository.ResponseStatusCheck(responseStatus);    
} 

Lớp ResponseStatus được hiển thị bên dưới.

public class ResponseStatus : AppBaseModel 
{ 
     public int SurveyId { get; set; } 
     public int CreatorId { get; set; } 
     public int GlobalAppId { get; set; } 
     public List<Associate> AssociateList { get; set; } 
} 

Tôi đã thay đổi Danh sách <> vào bộ sưu tập <> như một phần của sự điều chỉnh phân tích mã của tôi. tức là, public Collection<Associate> AssociateList { get; set; }

Nhưng nó luôn nhận được giá trị rỗng khi chúng tôi đang sử dụng bộ sưu tập thay vì Danh sách. Có lý do cụ thể nào cho việc này không?

+1

Hãy thử sử dụng IEnumerable hoặc kiểm tra điều này cũng [link] (http://stackoverflow.com/questions/15071120/how-to-pass-an-object-array-to-webapi-list) có thể giúp bạn. – Kishor

Trả lời

0

Ok, tôi nghĩ tôi sẽ phải trả lời câu hỏi này theo cách gián tiếp. Những gì bạn truyền vào máy chủ là một mảng các đối tượng (ở định dạng JSON), nhưng một khi bạn bắt đầu xử lý trong C#, mảng đối tượng được coi là một đối tượng C# duy nhất. Bên trong đối tượng này, mô hình của bạn trông đợi một trong các trường là Bộ sưu tập của Liên kết.

Phải, khi tôi làm việc với dữ liệu JSON tương tự như những gì được đề cập trong trường hợp này - Tôi thích sử dụng Newtonsofts 'JOject.

Vì vậy, đây là cách tôi làm đối tượng C# với các dữ liệu JSON bạn cung cấp:

sử dụng mô hình của bạn:

public class ResponseStatus 
{ 
    public int SurveyId { get; set; } 
    public int CreatorId { get; set; } 
    public int GlobalAppId { get; set; } 
    public Collection<Associate> AssociateList { get; set; } 
} 

public class Associate 
{ 
    public int AssociateId { get; set; } 
} 

Made một thói quen mà mất chuỗi (các dữ liệu JSON), và trả về một đối tượng của loại ResponseStatus:

using System; 
using System.Collections.Generic; 
using Newtonsoft.Json.Linq; 

--------------------------------------------------------------------- 

public static ResponseStatus GetResponseStatusObject(string jsonData) 
{ 
    JObject jObject = JObject.Parse(jsonData); 
    return jObject.ToObject<ResponseStatus>(); 
} 

Bây giờ khi tôi gọi phương thức này và vượt qua trên các dữ liệu JSON cùng chính xác mà bạn cung cấp, tôi có được điều này:

Breakpoint after method ran

này có thể không trực tiếp giải quyết vấn đề của bạn, nhưng hy vọng hướng dẫn bạn đi đúng hướng trong việc tìm hiểu mảng/đối tượng serialization khi làm việc với Javascript/C#.

Chúc bạn may mắn!

Các vấn đề liên quan