首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IXmlSerializable

IXmlSerializable
EN

Stack Overflow用户
提问于 2009-06-26 18:45:14
回答 2查看 1.4K关注 0票数 1

你们能帮我吗?我在通过IXmlSerializable进行反序列化时遇到了问题

代码语言:javascript
复制
var ArrayOfAccounts = new Accounts(); //This class structure I'm trying to read

Class Accounts:List<Session>{ }

Class Shedule{
  public DateTime StartAt { get; set; }
  public DateTime EndAt { get; set; }
}

Class Session:IXmlSerializable {
 public string Name{get;set;}
 public string Pass{get;set;}
 public List<Shedule> Shedules = new List<Shedule>();


 public void ReadXml(System.Xml.XmlReader reader){
    //AND HERE IS A PROBLEM. I don't know how to implement right code here. I've tried 
    //code below, but this one works for the first account only, and doesn't restore others 

  Schedules.Clear();
  XmlReader subR = reader.ReadSubtree();

  if (reader.MoveToAttribute("Name"))
      Name = reader.Value;
   if (reader.MoveToAttribute("Password"))
      Password = reader.Value;

 reader.MoveToContent();

 while (subR.ReadToFollowing("Schedule"))
        {
            XmlSerializer x = new XmlSerializer(typeof(Schedule));
            object o = x.Deserialize(subR);
            if (o is Schedule) Schedules.Add((Schedule)o);
        }
 }

xml本身看起来像这样:

代码语言:javascript
复制
<Accounts>
   <Session UserName="18SRO" Password="shalom99">
     <Schedule>
      <StartAt>0001-01-01T09:30:00</StartAt>
      <EndAt>0001-01-01T16:00:00</EndAt>
    </Schedule>
  </Session>
</Accounts>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-06-26 18:50:00

既然您已经定义了类,那么您应该能够使用XML序列化属性,并使用默认的XML反序列化程序。

您的结构看起来并不太复杂,是否有什么特殊的原因使您不使用序列化属性而是手动反序列化?

票数 1
EN

Stack Overflow用户

发布于 2009-06-26 19:59:17

重新继承字段...如果你切换到DataContractSerializer,那么字段是“选择加入”而不是“选择退出”--但是你失去了指定属性的能力(所有东西都是一个元素)。一个简单的例子:

代码语言:javascript
复制
[DataContract(Name="foo")]
public class Foo
{
    [DataMember(Name="bar")]
    public string Bar { get; set; }

    public int ThisIsntSerialized {get;set;}
}

然而,添加意想不到的子类对于XmlSerializerDataContractSerializer来说都是一件痛苦的事情。两个人都能做到,但这不是很好。

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

https://stackoverflow.com/questions/1050603

复制
相关文章

相似问题

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