0

(vb.net/c#/等)

我无法弄清楚如何做一些反序列化魔术。目前标准反序列化工作正常,包括枚举,但现在我想将属性转换为类。哦!我在什么!

我的 xml 看起来有点像这样:

....
<review user="..." version="2.2">...</review>

这适用于我的财产/班级:

[XmlAttribute("version")]
public MyVersion Version { get; set; }

class MyVersion  {
    // equality overloaded
    // can ctype() from string to MyVersion
    // constructor that takes a single string, etc
}

我怎样才能帮助序列化程序,以便它可以自动将我的字符串属性反序列化到这个类中?我是否需要以某种方式修改 MyVersion 类,或更改属性的定义?

  • 不想重写任何方法,如 OnDeserialized 等。这对这个项目来说是不值得的。

如果这不能用默认的 xml 反序列化器完成,那么知道就足够了。它有很多不好的地方,所以我不会感到惊讶。

谢谢!

4

2 回答 2

1

这不受声明性方式的支持。您必须在父类(序列化为元素的类)上实现 IXmlSerializable 并手动执行字符串和 MyValue 类型之间的转换。

于 2009-01-07T19:33:24.033 回答
0

你可以很容易地做到这一点 - 只是不是作为反序列化操作。

使用 XSD 创建您的反序列化类。现在这些都是部分类,因此您可以编写评论类的新部分(包含属性“版本”)并添加一个获取/设置版本的方法。

在 get 方法中简单地创建该类的新实例,并在 set 方法中简单地从提供的版本类更新现有版本。

于 2009-01-07T19:46:58.670 回答