1

我正在设计一个从 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>

我仍然很困惑这种结构是否足以应对未来可能出现的任何工作。请建议您是否有设计类似东西的经验。

4

2 回答 2

0

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

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

它不适用于所有场景,但可能适用于大多数模式向后兼容的情况

于 2012-05-14T10:50:13.357 回答
0

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

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

于 2012-05-14T10:51:21.493 回答