【发布时间】: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