【问题标题】:C# Deserialize XML to correct class typeC# 反序列化 XML 以更正类类型
【发布时间】:2014-07-10 08:15:59
【问题描述】:

我正在使用XmlSerializer 做一些序列化工作。我想知道是否可以从 XmlDocuement“一般”反序列化。

具体:如果我有一个 XML 文件,我会观察标签并将其与我的 DTO 模型进行比较。这可能吗(更好:.NET 支持吗?)?也许使用 XSD 文件之类的?


示例(没有通用反序列化):

        XmlDocument myDocument = new XmlDocument();
        myDocument.Load(xml);

        MemoryStream stream = new MemoryStream();
        myDocument.Save(stream);

        // Here I would like to use an interface instead and load the correct type of object.
        XmlSerializer serializer = new XmlSerializer(typeof(MyClass));

        MyClass myObject;

        serializer.Serialize(stream, myObject);

【问题讨论】:

  • 澄清一下,您想映射一个与您的 DTO 不完全对齐的 XML?
  • 抱歉不清楚。我想将 XML 映射到我完全对齐的 DTO。但我正在加载不同类型的 XML 文件。然后我必须检查 XmlDocument 中定义对象类型的标记。是否可以使用通用方法解决此问题。如果我使用接口反序列化对象。
  • 您也许可以使用动态对象来读取您的 xml,然后在您的 dto 上使用反射来做您想做的事情。 This 是开始的地方
  • 一个类文件中有很多 XML?我会说使用XDocument 并为每种文件类型编写一个解析器。至少对一个文档的微小更改不会影响其他文档。
  • 我不想将大量 XML 反序列化到一个类文件中。我想在反序列化时使用 XSD 来使用正确的类,而不必先解析标签。我正在尝试删除我的应用程序中的所有 XML-Parsing 并让 .NET Framework 处理它,如果可能的话。

标签: c# .net xml serialization


【解决方案1】:

唯一的方法是预先解析 xml 文件,以便了解要创建的类。 您还可以在某处(在文件扩展名中?在文档的第一个元素的属性中?)写入类类型。 当您拥有类类型时,您可以通过 switch 语句(将字符串转换为类型)或通过反射(更好)来创建正确的类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多