2012-05-14 41 views
1

我设计一个通用的解决方案从XML导入对象数据导入数据。在我的应用程序类的结构就像是以下几点:通用设计通过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> 

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

回答

0

如果您正在使用不同的数据时(这是XML格式的),我已经做了我的工作如下:

  • 确保每个XML数据由XSD(架构)的支持
  • 你然后可以使用XSD.EXE到架构转换成CS
  • 在C#中,你直接在数据模型的工作(通过从XML反序列化它使用C#XmlSerializer
  • 这样,你主要集中在您的DataModel(C#相当于)而不是解析Xml元素和attribut ES

它在所有情况下不工作,但在大多数可能在哪里工作模式是向后兼容

0

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

如果映射的关键字是唯一的(在我的例子中,你不清楚你的字符串键是什么)

+0

感谢你的回应。并不是所有的类都有相同的结构在这个例子中,我使用字典通过使用Key来快速访问OtherClass。是的,他们是独一无二的,他们也会参加其他课程。实际上,每个班级都有责任解释数据的使用。例如,目前所有的属性都是必需的,因为MyObject类有字典。 PointIDs - > Keys和SubProperties - > OtherClass的属性。但有可能是一些类有简单的结构,其中值可以在没有任何属性直接指定 VAL AksharRoop

+0

续..这意味着价值直接与SerializedPropertyName – AksharRoop

+0

相关联。如果类是足够的不同,你最好创建特定类对于XML中可能遇到的每种可能的类型 – Attila