首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用IXmlSerializable时未调用ReadXml

使用IXmlSerializable时未调用ReadXml
EN

Stack Overflow用户
提问于 2012-05-22 17:57:18
回答 2查看 1.2K关注 0票数 1

在尝试使用IXmlSerializable时,我遇到了一些问题。反序列化时似乎没有调用ReadXml方法,而调用了WriteXml方法。

下面是代码的精简版本。

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

要序列化和反序列化,我执行以下操作:

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

我是不是在这个类的设置上做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-24 00:29:38

我最初的印象是继承自IXmlSerializable使我能够读写所有传入的数据。但是,验证是为了确保类类型是相同的。因此,我需要序列化和反序列化Character

我的意图是能够序列化子类。我已经通过使用WriteXml方法并在该方法中使用反射来获取基于根节点的关联类型,从而实现了这一点。

我希望这个解释能帮助其他人。

票数 1
EN

Stack Overflow用户

发布于 2012-05-24 00:35:21

代码语言:javascript
复制
public class UserCharacter : Character
{
    public void ReadXml(XmlReader reader)
    {
        base.ReadXml(reader);
    }
    public void WriteXml(XmlWriter writer)
    {
        base.WriteXml(writer);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10699717

复制
相关文章

相似问题

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