Когда использовать XamlWriter.Save () для сериализации объекта домена? - PullRequest
0 голосов
/ 09 июля 2010

Каково обоснование (если есть) использования XamlWriter.Save () для сериализации объекта домена?Пожалуйста, опишите реалистичные сценарии.Спасибо.

Ответы [ 3 ]

1 голос
/ 09 июля 2010

Нет особых причин сериализовать объект домена в XAML, если вы не собираетесь напрямую модифицировать сериализованный XAML. Но есть много обстоятельств, при которых вы могли бы сделать это.

Например, предположим, у вас есть объект модели представления, который вы хотите использовать при разработке пользовательского интерфейса в Expression Blend. Обычно вы пишете код, который генерирует тестовый экземпляр объекта, а затем ссылается на этот код в проекте Blend. Но вы также можете сериализовать объект в XAML и добавить файл XAML в проект Blend.

Это может быть довольно полезно. Сделав это, вы можете настроить значения свойств вашего тестового объекта внутри Blend, отредактировав его представление XAML вместо изменения кода, который его создает. Конечно, вы можете сделать более или менее то же самое, используя обычную сериализацию XML - изменение сериализованного XML-файла, который использует конструктор вашего тестового объекта, - почти то же самое, что модификация сериализованного XAML. Разница в том, что вы можете встроить представление XAML непосредственно в другие файлы XAML.

Другое преимущество, которое вы получаете, заключается в том, что если XAML является вашим форматом сериализации, вы можете использовать расширения разметки и преобразователи значений. Опять же, это будет полезно, только если вы модифицируете сериализованный XAML, как в сценарии, который я только что описал.

1 голос
/ 09 июля 2010

Xaml включает кодирование информации об отражении в XML.Вы можете сериализовать дерево объектов с элементами неизвестных типов во время компиляции, а затем десериализовать и идентифицировать типы времени выполнения из класса xmlns:.Если у вас есть своя логика привязки, вы можете сделать так, чтобы xaml включил ее.(Как и в случае с WPF и WF.)

0 голосов
/ 09 июля 2010

XamlWrite.Save предназначен для сериализации объектов WPF, таких как Controls / Windows (которые имеют представление xaml), проверьте: http://msdn.microsoft.com/en-us/library/ms754193.aspx. Для сериализации объектов домена используйте XmlSerializer.

Я сделалпростой тест:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Markup;
using System.IO;

namespace XamlTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person() { Id = 5, Name = "SomeName" };
            StringWriter sw = new StringWriter();
            XamlWriter.Save(p, sw);
            Console.Write(sw.GetStringBuilder().ToString());
            Console.ReadLine();
        }
    }

    public class Person
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public string Phone { get; set; }
    }
}

печатает следующее:

<Person Id="5" Name="SomeName" Phone="{x:Null}" xmlns="clr-namespace:XamlTest;assembly=XamlTest" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" />  

Нет смысла его использовать, я почти уверен, что он использует XmlSerializer за кулисами.

...