2013-05-29 4 views
2

Я относительно новый для ServiceStack и RESTful услуг в целом, и я бег в следующем блокпост:Передача экземпляра пользовательского класса в качестве данных в ServiceStack PUT

У меня есть объект запроса ServiceStack подобного к следующему (в C#):

[Authenticate] 
[Route("/product", "POST")] 
[Route("/product/{productId}", "GET,PUT,DELETE")] 
public class SomeProductRequest: IReturn<Dto.Product> 
{ 
    public int ProductId{ get; set; } 
    public ProductStuff SomeProductProperties { get; set; } 
} 

можно построить объект в JavaScript, на стороне клиента готовится к PUT как так:

var product = { 
    productId: 100, 
    someProductProperties: { id:5, name:"My Name" } 
}; 

Однако, всякий раз, когда г equest достигает сервера, SomeProductProperties всегда будет null. Фактически, я не могу передать пользовательские типы на сервер вообще. Только базовые, испеченные в .NET типы, похоже, переходят через провод (int, string и т. Д.)

Есть ли какой-то трюк, чтобы иметь свойство определяемого пользователем класса в объекте запроса?

Вся помощь очень ценится! Спасибо!

+0

Недостаточно контекста, чтобы показать только литерал объекта JavaScript, вы также должны показать, как вы его вызываете, и в идеале полный HTTP-запрос + ответ, который вы можете получить от WebInspector или Fiddler. – mythz

ответ

1

Закончено, выяснив это после обсуждения с коллегой. На благо всех остальных, вот что я сделал:

При передаче сложного типа по сети, вам нужно обернуть ваш объект JS, который содержит сложный тип, используя JSON.stringify() и передать полученную строку вместо:

var updatedUser = self.buildUserObjectFromGui(); 
$.ajax({ 
    type: 'PUT', 
    contentType: "application/json", 
    data: JSON.stringify(updatedUser), 
    url: 'internal/user/' + this.options.userId 
}); 
Смежные вопросы