2016-11-11 41 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實例。

希望明確。