#c_sharp #wpf #json #рекурсия #serialize
Почему когда я хочу сериализовать в JSON какой нибудь контрол, то вылазит рекурсия? JavaScriptSerializer serializer = new JavaScriptSerializer(); string json = serializer.Serialize(label1);
Ответы
Ответ 1
Потому что у контрола есть ссылка на родительский контрол, а у того список ссылок на детей - круг замкнулся. Можно написать свою обертку, у которой только те свойства, которые Вы хотите сохранить. public class ControlWrapper { private Control fControl; public ControlWrapper(Control aControl) { fControl = aControl; } public int Width { get { return fControl.Width; } } ... } JavaScriptSerializer serializer = new JavaScriptSerializer(); string json = serializer.Serialize(new ControlWrapper(label1));Ответ 2
Потому что вы пытаетесь сериализировать несериализируемое: UI-контрол. Контролы не предназначены для сериализации, т. к. у них есть внутреннее состояние и внутренние привязки (например — подписки на события), которые невозможно сохранить при сериализации. Делайте правильно, сохраняйте модель, а не представление. Срезать углы не выйдет.Ответ 3
Раз вы используете wpf, можно попробовать XAML-сериализацию.
Комментариев нет:
Отправить комментарий