#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:
Я понял, что в коде была ошибка. Класс, который был сериализован, фактически вернул словарь преобразование объекта в строку вызывало поведение, которое я наблюдал, и в действительности сериализатор был в состоянии правильно сериализовать объекты.