NewtonSoft jsonконвертирует SerializeObject словарь управляющих символов объекта

#c# #json #wcf #dictionary #json.net

#c# #json #wcf #словарь #json.net

Вопрос:

У меня возникли некоторые проблемы с использованием метода JsonConvert.SerializeObject, касающегося escape-символов в WCF. Мой веб-метод возвращает поток следующим образом:

  return new MemoryStream(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(myObject)));
  

Это прекрасно работает , за исключением того, что одним из свойств MyObject является Словарь <string, object> . Все простые типы сериализуются правильно, однако, когда я пытаюсь добавить свой пользовательский класс в качестве значения, я получаю возвращаемый тип вместо данных. Осознав, что это происходит из-за вызова сериализатора.toString в моем пользовательском классе, я попытался переопределить его с помощью:

 public override string ToString()
    {
        return JsonConvert.SerializeObject(this);
    }
  

Однако возвращаемые данные теперь включают в себя escape-символы

 {       
    "my_dictionary":    {
      "elem_1": "{"Prop1":null,"Prop2":3}",
      "elem_2": "{"Prop1":null,"Prop2":3}",
      "int_property" : 123
   }
}
  

Есть какие-нибудь идеи о том, как я мог бы избежать экранирования моего пользовательского класса таким образом и возврата в виде массива?

Заранее спасибо, Мэтт

Ответ №1:

Я использую JavaScriptSerializer (просто замените «Object» вашим пользовательским классом)

 using System.Web.Script.Serialization;

List<Object> list = new List<Object>();

JavaScriptSerializer jss = new JavaScriptSerializer();

string res = jss.Serialize(list);
  

и получите этот формат со значением «res»:

 [{"IdEmpresa":1,"Nombre":"Test","URL":"http:/localhost:8080/","Activo":true},IdEmpresa":2,"Nombre":"Test2,","URL":"http://localhost:8081/","Activo":true}]
  

Ответ №2:

Я понял, что в коде была ошибка. Класс, который был сериализован, фактически вернул словарь преобразование объекта в строку вызывало поведение, которое я наблюдал, и в действительности сериализатор был в состоянии правильно сериализовать объекты.