首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用TextRange属性序列化类?

如何使用TextRange属性序列化类?
EN

Stack Overflow用户
提问于 2016-11-11 12:23:35
回答 1查看 262关注 0票数 2

我正在尝试序列化一个类,该类中有一个类型为TextRange的属性。

示例:

代码语言:javascript
复制
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类型不能定期序列化,它有自己的特殊方法来序列化自己,我这样做:

代码语言:javascript
复制
using (MemoryStream ms = new MemoryStream())
{
    myTextRange.Save(ms, DataFormats.Xaml, true);
    string xaml = Encoding.ASCII.GetString(ms.ToArray());
}

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

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

,这就是我经常做的事情:

代码语言:javascript
复制
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;
}

我该怎么做?

EN

回答 1

Stack Overflow用户

发布于 2016-11-11 22:23:28

对任何感兴趣的人来说。问题是,我希望将整个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实例。

希望这是清楚的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40547961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档