【问题标题】:XMLSerializer not reading all ElementsXMLSerializer 未读取所有元素
【发布时间】:2013-02-26 17:45:04
【问题描述】:

我有一个类用于通过 XMLSerializer 进行序列化和反序列化。 ExportSteps 是另一个实现 IXmlSerializer 以进行自定义序列化的类。

我的问题是它在读取 exportSteps 后没有读取和设置任何属性。如果我将 IsNew 和 Test2 移到 Steps 上方,它可以正常工作。我不认为这是一个有效的解决方案,如果我需要两个自定义序列化类怎么办?

public class PublishOptions
{


    [XmlElement( "test" )]
    public bool Test { get; set; }

    [XmlElement( "exportSteps" )]
    public ExportSteps Steps { get; set; } <-- implements IXmlSerializable

    [XmlElement( "isNew" )]
    public bool IsNew { get; set; }

    [XmlElement( "test2" )]
    public bool Test2{ get; set; }}
}

var test = serializer.Deserialize(stream) as PublishOptions;

XML(示例):

<publishingOptions>
  <test>true</test>
  <exportSteps>     
    <option>foo</option>
    <option>bar</option>
  </exportSteps>
  <isNew>true</isNew>
  <test2>true</test2>
</publishingOptions>

【问题讨论】:

  • 什么 XML 结构看起来像 Shah 而不是 Stream 你有没有想过使用 XMLReader
  • 用示例 XML 编辑。请注意,这是一个简化版本。
  • 在您的示例中,您说该元素名为“exportOptions”,而在您的代码中,您将其标记为“exportSteps”,这是一个错字吗?它们应该匹配名称,否则在尝试反序列化时可能会导致内部错误。
  • 修正了,这只是一个错字,我使用同一个类来序列化 xml,所以它们应该匹配。我只是想知道自定义类是否必须按元素顺序放在最后。如果我重新订购并把它放在最后,似乎一切都很好。
  • 属性 IsNew 应该是 XMLElement("isNew")

标签: c# serialization xml-serialization


【解决方案1】:

我发现了错误,它在 ReadXml 方法中。阅读器在元素中间退出自定义阅读器。这导致自定义序列化程序失败后的任何事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-19
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多