2

我正在尝试序列化一个具有类型属性的类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());
}

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

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

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

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;
}

我怎样才能做到这一点?

4

1 回答 1

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 实例。

希望这很清楚。

于 2016-11-11T22:23:28.347 回答