Сериализуйте свойство пользовательского типа в строку, используя JavascriptSerializer - PullRequest
1 голос
/ 30 марта 2011

Я некоторое время использую класс .NET JavascriptSerializer, чтобы сериализовать мой объект в представление JSON и использовать его на стороне клиента. Все отлично работает, пока я придерживаюсь типов по умолчанию, таких как int, string и т. Д. Однако теперь я хочу сериализовать свойство настраиваемого типа для моего объекта. Давайте посмотрим на пример моего класса:

public class ClientData 
{      
    public Guid Id { get; set; }
    public string Description { get; set; }
    public MyCustomObject ObjectX { get; set; }
}

Ват, я хочу, это клиентский объект, который выглядит примерно так:

{ Id: 0000-0000-000-0000, Description: "some description", ObjectX: "125.20" }

Чтобы сделать это, я попытался использовать JavaScriptConverter, но это, похоже, не решило проблему, потому что он может обрабатывать только словари, что будет выглядеть так:

{ Id: 0000-0000-000-0000, Description: "some description", ObjectX: { Value: "125.20"} }

Это не то, что я хочу. Кстати, я реализовал toString в классе MyCustomObject.

Есть предложения?

Спасибо, спасибо.

Ответы [ 3 ]

0 голосов
/ 30 марта 2011

Использование JsonConverter из библиотеки Json.NET, похоже, поможет мне.

0 голосов
/ 28 декабря 2011

Вы можете преобразовать пользовательский объект в строку. Вы используете JavaScriptConverter, который преобразует ваш объект в экземпляр Uri, который также реализует IDictionary, чтобы позволить ему проходить из JavaScriptConverter.

Этот хак описан для объектов DateTime здесь: http://blog.calyptus.eu/seb/2011/12/custom-datetime-json-serialization/

0 голосов
/ 30 марта 2011

вот страница msdn для javascriptserializer: http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

в разделе замечаний написано:

Чтобы сериализовать объект, используйте метод Serialize. Чтобы десериализовать строку JSON, используйте методы Deserialize или DeserializeObject. Чтобы сериализовать и десериализовать типы, которые изначально не поддерживаются JavaScriptSerializer, реализуйте пользовательские конвертеры с помощью класса JavaScriptConverter. Затем зарегистрируйте конвертеры с помощью метода RegisterConverters.

так что вы должны посмотреть на этот класс: http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptconverter.aspx

...