c# - 如何使用 TextRange 属性序列化一个类?

标签 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());
}

问题是我希望将类与 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;
}

我该怎么做?

最佳答案

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

  • 在 MyClass 中创建一个公共(public)帮助程序类,例如 MyClassSerializationHelper。

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

序列化:

  • 创建一个 MyClassSerializationHelper 实例。

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

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

  • 序列化整个 MyClassSerializationHelper 实例,您得到一个 xml 字符串。

反序列化:

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

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

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

希望这很清楚。

关于c# - 如何使用 TextRange 属性序列化一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40547961/

相关文章:

php - __clone() 与反序列化(序列化())?

c# - WPF RichTextBox 增量字体大小

javascript - 获取文本范围的 offsetLeft

c# - 从 c# 运行 powershell 脚本

c# - 格式文本框中的文本格式

c++ - Cereal——多重反序列化

c# - 如何在没有 IIS 的情况下自动将 LESS 转换为 CSS?

c# - ReactiveUI、WPF 和验证

java - 实现保存和恢复对象属性状态的最佳方式