通过 XML 导入数据的通用设计

本文关键字:XML 导入 数据 通过 | 更新日期: 2023-09-27 18:34:01

我正在设计一个通用解决方案来从XML导入对象数据。在我的应用程序中,类结构如下所示:

class MyObject
{
    public string ID { get; private set; }
    // This may contain large set of values.
    public Dictionary<string, OtherClass> ObjectData { get; set; };
    public MyObject()
    {}
}
class OtherClass
{
    public string SubProperty1 { get; set; }
    public string SubProperty2 { get; set; }
    public string SubProperty3 { get; set; }
}

可以有许多其他类似于MyObject类,这些类可能具有需要导入的不同类型的属性。

我脑海中的架构设计将生成以下XML结构:

<BlobData DataType="MyObjectType">
  <DataValues UniqueID="MyObjectID" Property="SerializedPropertyName">
    <DataValue PointID="Point1" SubProperty="SubProperty1">Value1.1</DataValue>
    <DataValue PointID="Point2" SubProperty="SubProperty1">Value1.2</DataValue>
    <DataValue PointID="Point3" SubProperty="SubProperty1">Value1.3</DataValue>
    <DataValue PointID="Point1" SubProperty="SubProperty2">Value2.1</DataValue>
    <DataValue PointID="Point2" SubProperty="SubProperty2">Value2.2</DataValue>
    <DataValue PointID="Point3" SubProperty="SubProperty2">Value2.3</DataValue>
  </DataValues>
</BlobData>

我仍然感到困惑,这种结构是否足以满足未来可能出现的任何工作。如果您有任何设计类似东西的经验,请提出建议。

通过 XML 导入数据的通用设计

如果您正在使用不同的数据(XML 格式),我在工作中做了以下操作:

  • 确保每个 xml 数据都由 XSD(架构)提供支持
  • 然后,您可以使用 XSD.exe将架构转换为 CS
  • 在 C# 中,您可以直接使用该数据模型(通过使用 XmlSerializer 将其从 Xml 反序列化为 C#)
  • 这样,您主要专注于 DataModel(等效于 C#),而不是分析 Xml 元素和属性

它并非在所有情况下都有效,但可能适用于架构向后兼容的大多数情况

如果你所有类的结构都是相似的(例如 ID + 一些子属性),我会使用 list/set/other 集合而不是字典。 该集合将包含一个常规子属性类型/类,该类型/类具有三个值:Id (PointID?)、子属性的名称和值。

如果要映射的键是唯一的,请使用字典(我不清楚您的示例中的字符串键是什么)