我正在尝试序列化其中具有 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/