2009-09-03 3 views
0

Это похоже на последующий вопрос до this one.Можно ли десериализовать строку JSON в объект, если я знаю только параметры конструктора объектов?

В основном, что я делаю, выставляю некоторые поля на некоторых пользовательских интерфейсах для некоторых пользователей.

Эти поля устанавливаются на основе списка параметров данного объекта-конструктора. У пользователя есть возможность выбрать, к какому объекту отображает пользовательский интерфейс, о, я не знаю, скажем, выбирая объект из выпадающего списка или что-то в этом роде.

Как только поля заполняются и пользователь отправляет, я знаю, какой тип объекта мне нужно создать, я знаю имена параметров, которые принимает его конструктор, и типы параметров. Я получаю строку JSON на сервере (код C#).

Объект потенциально может иметь гораздо больше свойств, открытых или закрытых, чем то, что предоставляет конструктор.

Можно ли использовать десериализацию JavaScript или JSON для использования моего объекта, если строка JSON не содержит данные для всех свойств?

Я не уверен, если я могу указать значения по умолчанию как-то атрибуты собственности или что-то ...

Спасибо.

+0

Я пытаюсь использовать DataContractJsonSerializer. Объект, который я пытаюсь использовать deserialzie, происходит от класса, который происходит от класса. Я должен был убедиться, что классы, из которых он распространяется, также имеют атрибут DataContract. Я могу получить объект сейчас. – topwik

+0

... но кажется, что мой JSON не может быть отформатирован правильно. Я не строю объект правильно на стороне клиента, так как свойства не установлены должным образом. – topwik

ответ

2

Json.NET поддерживает создание типа с помощью параметризованного конструктора при условии, что существует только один конструктор, а имена параметров соответствуют именам свойств объекта JSON.

1

Deserializer DataContract не использует конструкторы типа при заполнении объекта вообще. Он фактически заполняет объект, используя поля/сеттеры/геттеры. Кроме того, если вы не укажете значения для некоторых свойств, они будут инициализироваться до значения по умолчанию, если вы не подключите события DataContract, такие как OnDeserializing, OnDeserialize и т. Д. Так, например, если тип имеет свойство FirstName типа string (очевидно), и json не имеет ничего определенного для FirstName, когда вы deserialize вы получите значение null в качестве значения по умолчанию, так как вы не предоставили это поле.

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

  • Нет связанных вопросов^_^