JavaScriptSerializer десериализовывают объектный “набор” как свойство в объектном сбое

Мне структурировали объект js как:

object.property1 = "some string";
object.property2 = "some string";
object.property3.property1 = "some string";
object.property3.property2 = "some string";
object.property3.property2 = "some string";

я использую JSON.stringify (объект) передать это с запросом ajax. Когда я пытаюсь десериализовать это использование JavaScriptSerializer. Десериализуйте как Словарь, я получаю следующую ошибку:

Никакой конструктор без параметров не определяется для типа 'Системы. Строка'.

Этот точно тот же самый процесс работает на регулярный объект с не свойства "набора".. спасибо за любую справку!

6
задан bill 2 June 2010 в 16:27
поделиться

1 ответ

Это потому, что десериализатор не знает, как работать с подобъектом. То, что у вас есть в JS, это вот это:

var x = {
  'property1' : 'string',
  'property2' : 'string',
  'property3' : { p1: 'string', p2: 'string', p3: 'string' },
};

которое не имеет карты к чему-то, допустимому в C#:

HashTable h = new HashTable();
h.Add("property1", "string");
h.Add("property2", "string");
h.Add("property3", ???);

Причина в том, что здесь не определен тип, так что как десериализатор узнает, что представляет собой анонимный объект в вашем JS?

Редактировать

Нет способа сделать то, что вы пытаетесь достичь здесь. Вам нужно сделать ваш объект типизированным. Например, определите свой класс следующим образом:

class Foo{
  string property1 { get; set; } 
  string property2 { get; set; }
  Bar property3 { get; set; } // "Bar" would describe your sub-object
}

class Bar{
  string p1 { get; set; }
  string p2 { get; set; }
  string p3 { get; set; }
}

... или что-то в этом роде.

9
ответ дан 10 December 2019 в 02:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: