2012-05-14 58 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