通过 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 数据都由 XSD(架构)提供支持
- 然后,您可以使用 XSD.exe将架构转换为 CS
- 在 C# 中,您可以直接使用该数据模型(通过使用
XmlSerializer
将其从 Xml 反序列化为 C#) - 这样,您主要专注于 DataModel(等效于 C#),而不是分析 Xml 元素和属性
它并非在所有情况下都有效,但可能适用于架构向后兼容的大多数情况
如果你所有类的结构都是相似的(例如 ID + 一些子属性),我会使用 list/set/other 集合而不是字典。 该集合将包含一个常规子属性类型/类,该类型/类具有三个值:Id (PointID?)、子属性的名称和值。
如果要映射的键是唯一的,请使用字典(我不清楚您的示例中的字符串键是什么)