如何使用TextRange属性序列化类?

时间:2016-11-11 12:23:36

标签: c# serialization textrange

我正在尝试序列化其中包含TextRange类型属性的类。

示例:

public class MyClass
{
    private string someProp;
    public string SomeProp
    {
        get { return someProp; }
        set { someProp = value; }
    }

    private TextRange myTextRange;
    public TextRange MyTextRange
    {
        get { return myTextRange; }
        set { myTextRange = value; }
    }
}

问题是,TextRange类型在序列化整个类时无法定期序列化,它有自己的特殊方法来序列化自己,我这样做:

using (MemoryStream ms = new MemoryStream())
{
    myTextRange.Save(ms, DataFormats.Xaml, true);
    string xaml = Encoding.ASCII.GetString(ms.ToArray());
}

问题是我希望将类序列化为一个字符串(xml字符串),其中TextRange属性和另一个属性在一起。我不介意使用另一种序列化方法(不是xml),但我不知道它是如何解决这个问题的。

我经常一次序列化整个类,但TextRange类没有标记为可序列化(没有二进制序列化),也没有空构造函数(没有xml serilization)。

这就是我经常这样做的方式:

XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
StringWriter stringWriter = new StringWriter();
using (XmlWriter writer = XmlWriter.Create(stringWriter))
{
    serializer.Serialize(writer, this);
    string xml = stringWriter.ToString();
    return xml;
}

我该怎么做?

1 个答案:

答案 0 :(得分:0)

嗯,对任何有兴趣的人。问题是我希望将整个MyClass对象序列化为一个xml字符串。但TextRange需要特殊的序列化方法,就像我在主帖中写的那样。所以解决方法是:

  • 在MyClass中创建一个公共帮助器类,比如说MyClassSerializationHelper。

  • 为其添加两个字符串属性,与MyClass属性相同,但作为字符串。在我的例子中SomeProp和MyTextRange。完整属性(getter和setter)。

序列化:

  • 创建一个MyClassSerializationHelper实例。

  • SomeProp从MyClass SomeProp属性中获取相同的值,因为它是一个字符串。

  • MyTextRange使用特殊的序列化方法获取MyClass MyTextRange属性的序列化字符串

  • 序列化整个MyClassSerializationHelper实例,你有一个xml字符串。

要反序列化:

  • 反序列化xml字符串并获取MyClassSerializationHelper实例。

  • 反序列化MyTextRange属性(它是一个xml字符串)以获取TextRange实例。

  • 使用您反序列化的属性重建MyClass实例。

希望明白。