Как лучше всего разделить логические типы между кодом сервера .NET и кодом клиента JavaScript? - PullRequest
0 голосов
/ 28 мая 2009

У меня есть серверное приложение ASP.NET MVC и код клиента, который использует jquery. Я хотел бы использовать ajax для передачи объектов с клиента на сервер и обратно. На сервере я бы просто проверял и сериализировал их. На клиенте у меня есть некоторый код пользовательского интерфейса для создания визуального представления и некоторый другой код для управления некоторыми свойствами объекта.

Мой вопрос таков: как лучше всего организовать эти объекты вокруг меня? Моя текущая идея - просто вернуть объект, завернутый как JsonResult, из моего действия контроллера, но я не уверен, что лучше всего передать объект обратно в мир MVC после того, как я закончу работать с ним на клиенте. Я мог бы просто создать строку JSON и передать ее обратно в MVC в качестве строкового аргумента действия контроллера, где мне пришлось бы вручную распаковать JSON в тип .NET. Есть ли способ сделать более автоматическое сопоставление с типом .NET или какой-то другой механизм «удобства», который мог бы помочь предотвратить ошибки здесь (даже если мне нужно написать этот механизм удобства)?

Это кажется очень похожим на идею ModelBinder, и, возможно, меня просто обескураживает мысль, что я собираюсь использовать jquery для отправки JSON обратно на сервер, вместо того, чтобы иметь "обычную" форму публикации. Могу ли я каким-либо образом использовать ModelBinder для преобразования моего JSON, предоставленного клиентом, в счастливый тип модели на стороне .NET?

1 Ответ

4 голосов
/ 28 мая 2009

Вам НЕ нужно вручную распаковывать JSON в тип .NET. У вас есть различные библиотеки, которые делают это для вас. Я лично предпочитаю JSON.NET . Все, что вам нужно сделать, это что-то вроде этого:

var deserializedObject = JsonConvert.DeserializeObject<ObjectType>(json);

Если вы не хотите зависеть от сторонней библиотеки, просто используйте MicrosoftSavizer:

var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var deserializedObject = serializer.Deserialize<ObjectType>(json);

Документация Microsoft для JavaScriptSerializer

...