2014-09-22 2 views
6

Я отправляю Json Array из клиентского веб-приложения в asp.net webapi. Например,Массив JSON преобразуется в общий список, но не преобразуется в общую коллекцию. Зачем?

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

Вот список Associate является массив JSON, Обычно он будет автоматически сериализации к списку <> объект.

Используя приведенный ниже код, я отправляю ответ на WebAPI

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

Класс ResponseStatus показан ниже.

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; } 
} 

Я изменил список <> в коллекцию <> как часть моей коррекции анализа кода. ie, public Collection<Associate> AssociateList { get; set; }

Но он всегда получает нулевое значение, когда мы используем коллекцию вместо List. Есть ли какая-то конкретная причина для этого?

+1

Попробуйте использовать IEnumerable или проверьте это также [ссылка] (http://stackoverflow.com/questions/15071120/how-to-pass-an-object-array-to-webapi-list) может вам помочь. – Kishor

ответ

0

Хорошо, я думаю, мне придется ответить на это косвенным путем. Что вы передаете серверу - это массив объектов (в формате JSON), но как только вы начнете обрабатывать его на C#, массив объектов теперь рассматривается как один объект C#. Внутри этого объекта ваша модель ожидает, что одно из полей будет Collection of Associate.

Право, когда я работаю с данными JSON, подобными тому, что упоминалось в этом случае - я предпочитаю использовать JOject Newtonsofts.

Так вот как я сделал C# объекта с данными JSON вы предоставили:

Используются ваша модель:

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; } 
} 

Сделана процедура, которая принимает строку (данные в формате JSON), и возвращает объект типа 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>(); 
} 

Теперь, когда я называю этот метод и передать точно те же данные JSON, которые вы предоставили, я получаю это:

Breakpoint after method ran

Это не может напрямую решить вашу проблему, но мы надеемся, поможет вам в правильном направлении в понимании массива/сериализации объектов при работе с JavaScript/C#.

Удачи!

Смежные вопросы