在尝试使用IXmlSerializable时,我遇到了一些问题。反序列化时似乎没有调用ReadXml方法,而调用了WriteXml方法。
下面是代码的精简版本。
public interface ICharacter {
string FullName { get; set; }
}
public class Character : ICharacter, IXmlSerializable {
public string FullName { get; set; }
public Character() {
//apply default character information
FullName = string.Empty;
}
}
public void ReadXml(XmlReader reader) {
if (reader == null) return;
//just using null to see if it's called, i've used a break point to check if it was fired
}
public void WriteXml(XmlWriter writer) {
writer.WriteElementString("FullName", FullName);
}
}要序列化和反序列化,我执行以下操作:
//serialise example
Character character = new Character();
using (StringWriter stringWriter = new StringWriter()) {
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Character));
xmlSerializer.Serialize(stringWriter, character);
xml = stringWriter.ToString();
}
//deserialise example
using (StringReader stringReader = new StringReader(xml)) {
XmlSerializer xmlSerializer = new XmlSerializer(typeof(UserCharacter));
_character = (Character)xmlSerializer.Deserialize(stringReader);
}我是不是在这个类的设置上做错了什么?
发布于 2012-05-24 00:29:38
我最初的印象是继承自IXmlSerializable使我能够读写所有传入的数据。但是,验证是为了确保类类型是相同的。因此,我需要序列化和反序列化Character。
我的意图是能够序列化子类。我已经通过使用WriteXml方法并在该方法中使用反射来获取基于根节点的关联类型,从而实现了这一点。
我希望这个解释能帮助其他人。
发布于 2012-05-24 00:35:21
public class UserCharacter : Character
{
public void ReadXml(XmlReader reader)
{
base.ReadXml(reader);
}
public void WriteXml(XmlWriter writer)
{
base.WriteXml(writer);
}
}https://stackoverflow.com/questions/10699717
复制相似问题