2016-11-11 30 views
1

我试图序列化一个类中有一个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 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; 
} 

我怎样才能做到这一点?

+0

你需要什么TextRange对象? –

+0

我从你问题的标题中删除了一个标签。看[这里](http://stackoverflow.com/help/tagging)为什么。 – dymanoid

+0

@HeadhunterXamd从格式化RichTextBox中的文本。 – moonlander

回答

0

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

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

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

序列化:

  • 创建MyClassSerializationHelper实例。

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

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

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

反序列化:

  • 反序列化XML字符串,并获得MyClassSerializationHelper instace。

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

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

希望明确。

相关问题