2014-10-01 2 views
2

У меня JSON:
EDITED: JSON ошибался. Я напечатал его вручнуюОтправка массива объектов json на .net веб-сервис

var VehiclesData = { 
    "VehiclesData": { 
     "VehiclesList": [ 
      { "year": "2010", "make": "honda", "model": "civic" }, 
      { "year": "2011", "make": "toyota", "model": "corolla" }, 
      { "year": "2012", "make": "audi", "model": "a4" }] 
    } 
} 

Я пытаюсь отправить это к API .net веб-службы, как это:

[WebMethod] 
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)] 
public string ProcessData(VehiclesData VehiclesData) 
{ 
    //...Do stuff here with VehiclesData 
} 

public class VehiclesData 
{ 
    public List<Vehicle> VehiclesList = new List<Vehicle>(); 

    public class Vehicle 
    { 
     private string year = string.Empty; 
     private string make = string.Empty; 
     private string model = string.Empty; 

     public string Year { get { return this.year; } set { this.make = value; } } 
     public string Make { get { return this.make; } set { this.make = value; } } 
     public string Model { get { return this.model; } set { this.model = value; } } 
    } 
} 

Я получаю «объект не соответствует целевой тип».

С плоскими объектами JSON я получаю данные просто отлично, но с массивом объектов и списком C#, я немного потерян.

+0

Ваш json недействителен http://json2csharp.com/ – saj

ответ

2

Чтобы работать как есть, я думаю, что ваш объект JSON должен выглядеть следующим образом: именно:

var VehiclesData = { 
    "VehiclesList": 
     [ 
     { "Year": "2010", "Make": "honda", "Model": "civic" }, 
     { "Year": "2011", "Make": "toyota", "Model": "corolla" }, 
     { "Year": "2012", "Make": "audi", "Model": "a4" } 
     ] 
    }; 

В качестве альтернативы, вы должны быть в состоянии использовать некоторые атрибуты, чтобы помочь.

[DataContract] 
public class VehiclesData 
{ 
    [DataMember(Name = "year")] 
    public string Year { get; set; } 
    . 
    . 
    . 
} 

Это позволит вам сохранить имена в нижнем регистре в ваш объект JSON, но вам все равно нужно удалить «VehiclesData»: {часть, потому что я думаю, что во время сериализации .NET будет считать, что это свойство.

1

Я буду отмечать ответ peinearydevelopment как правильный для этого вопроса. Я закончил тем, что принял совсем другой подход, но все это очень похоже на то, что он сказал.

Я сделал изменения JSON, чтобы быть один уровень меньше (то же самое, что сказал peinearydevelopment), так что у него есть только массив объекта Vehicle, а затем в WebMethod я принял список типа объекта Автомобиль:

[WebMethod] 
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)] 
public string ProcessData(List<Vehicle> Vehicles) 
{ 
    //.. Do stuff here 
} 

Это сработало для меня. Надеюсь, что это поможет кому-то еще