XML反序列化 - 自动将属性值转换为类(.net)

时间:2009-01-07 19:13:46

标签: .net xml-serialization

(vb.net/c#/etc)

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

我的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反序列化器无法做到这一点,那么这就足以让人知道了。有很多东西是不好的,所以我不会感到惊讶。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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