2015-03-22 2 views
0

Я пытаюсь опубликовать объект в webservice nservicekit, запрос имеет мой объект, но свойства не затронуты. Но когда я десериализую с помощью JsonConvert.DeserializeObject, мой объект списка заполняется правильно. Может кто-нибудь помочь мне в этом? Что я делаю не так? Спасибо.Nservicekit deserialization

Я использую следующий код для того чтобы достигнуть

[Route("/LogbookRegistries", Summary = @"Posts an List type of LogbookRegistry")] 
public class LogbookRegistries 
{ 
    public List<LogBookRegistry> list { get; set; } 
} 
public class LogbookRegistriesService : Service 
{ 
    public object Options(LogbookRegistries request) 
    { 
     return true; 
    } 
    public LogbookRegistriesResponse Post(LogbookRegistries request) 
    { 
     var list = JsonConvert.DeserializeObject<List<LogBookRegistry>>(Request.FormData["list"]) ; 

     Boolean thereAreErrors = false; 

     // if (request.LogbookRegistriesList == null) throw new ArgumentNullException("Cant continue passed data is null"); 
     try 
     { 
      // DataBase.SaveList<LogBookRegistry>(request.LogbookRegistriesList); 
     } 
     catch (Exception ex) 
     { 

      thereAreErrors = true; 
     } 

     return new LogbookRegistriesResponse { ResponseStatus = new ResponseStatus { Message = thereAreErrors ? @"There were errors while saving data." : @"Posted data saved succesfully." } }; 
    } 
    public LogbookRegistriesResponse Get(LogbookRegistries request) 
    { 
     var list = DataBase.GetAll<LogBookRegistry>(); 
     return new LogbookRegistriesResponse { Data=list }; 
    } 
} 
public class LogbookRegistriesResponse 
{ 
    public ResponseStatus ResponseStatus { get; set; } 
    public List<LogBookRegistry> Data {get;set;} 
} 

public partial class LogBookRegistry 
{ 
    public LogBookRegistry() 
    { 
     this.LogBookRegistryDetails = new HashSet<LogBookRegistryDetail>(); 
    } 


    public string code { get; set; } 
    public System.DateTime date { get; set; } 
    public int locationId { get; set; } 
    public int actionTypeId { get; set; } 
    public Nullable<int> deviceId { get; set; } 
    public string remarks { get; set; } 

    public virtual Location Location { get; set; } 
    public virtual Item Item { get; set; } 
    public virtual ICollection<LogBookRegistryDetail> LogBookRegistryDetails { get; set; } 
    public virtual Device Device { get; set; } 
} 

из стороны в яваскрипте я использую

$.ajax({ 
      type: "POST", 
      url: 'http://localhost:49321/LogbookRegistries?', 
      data: {"list":JSON.stringify([ 
         { 
          "LogRegistryDetails": "", 
          "id": "0", 
          "locationId": "2", 
          "actionTypeId": "2", 
          "code": "TRP-OUT-Palmetal-20150310_151929", 
          "active": "true", 
          "date": "2015-03-10 15:19:29", 
          "deviceId": "1", 
          "remarks": "" 
         } 
      ])} , 
      dataType: 'json', 

     }) 
      .done(function (data, textStatus, jqXHR) { 
       debugger; 
       alert('done'); 
      }) 
     .fail(function (jqXHR, textStatus, errorThrown) { 
      debugger; 
      alert('fail'); 
     }); 

ответ

1

Вам нужен JSON.stringify() весь объект JSON данных, а не только элемент списка массив. Затем ServiceStack может десериализовать запрос автоматически.

$.ajax({ 
     type: "POST", 
     url: 'http://localhost:49321/LogbookRegistries?', 
     data: JSON.stringify({"list":[ 
        { 
         "LogRegistryDetails": "", 
         "id": "0", 
         "locationId": "2", 
         "actionTypeId": "2", 
         "code": "TRP-OUT-Palmetal-20150310_151929", 
         "active": "true", 
         "date": "2015-03-10 15:19:29", 
         "deviceId": "1", 
         "remarks": "" 
        } 
     ]}) , 
     dataType: 'json', 

    }) 
    .done(function (data, textStatus, jqXHR) { 
      debugger; 
      alert('done'); 
     }) 
    .fail(function (jqXHR, textStatus, errorThrown) { 
     debugger; 
     alert('fail'); 
    }); 
+0

Извините за поздний "комментарий". Я должен делать что-то неправильно, потому что, если я попытаюсь сделать, как вы sugest, список будет нулевым по запросу. Что я могу сделать неправильно? –