2013-05-01 37 views
0

我已經分配了一個任務,將參考數據從數據庫導入到一組實體類中。下面是一個更簡單的實體類的示例:如何將序列化數據讀入一組實體類?

public class CountryList 
{ 
    public CountryList() 
    { 
     this.Countries = new List<Country>();   
    } 

    public IList<Country> Countries { get; private set; } 
} 

填充XML文件不是我的責任。但是爲了指定所需格式而提供模式(XSD文件)是

到目前爲止,我已經試過註釋所需的類/成員[DataContract]/[DataMember]使用svcutil使用此命令生成一組的XSD文件:

svcutil /t:metadata /dconly MyProject.dll

這產生了很多東西10個獨立的XSD文件。我找不到一種只指定我感興趣的實體並減少它的方法。 (只有一些參考數據需要導入,並且有許多實體類不需要在XSD中)。

在另一種方法中,我發現this article關於如何從XML文件反序列化。看起來很簡單,但我想知道如何生成此示例中的book類的XSD文件?

+0

這聽起來很像家庭釀造的ORM。爲什麼你的數據庫訪問是通過XML來傳遞的? – 2013-05-01 08:13:37

+0

我們正在研究Microsoft Azure中的雲應用程序。雲應用程序與主數據庫是分開的(並有自己的表格存儲),但是主數據庫的參考數據需要定期上傳。 – 2013-05-01 08:17:16

回答

1

事實證明,使用代碼(而不是使用xsd.exesvcutil.exe)來生成XSD會更加清潔。下面是我遵循的步驟:

  1. 創建一個新的控制檯應用程序like this但使用StreamWriter輸出到文件而不是控制檯。由此產生的XSD只有我需要的實體而已。 [DataContract]/[DataMember]屬性導致XSD結構與代碼中的名稱相同。

  2. 使用Eclipse從XSD like this生成示例XML。使用code like this將XML文件反序列化爲所需的實體。

+0

很高興你把它分類 – 2013-05-01 20:38:56

1

要想從類或反之亦然架構,使用XSD.EXE

http://msdn.microsoft.com/en-us/library/x6c1kb0s(v=vs.71).aspx

有大量的閱讀對一個複雜的類如何轉化爲diferent架構做,但你應該使用該工具開始體面的開始。

+0

我其實首先嚐試了xsd.exe,但它抱怨'IList'不是可序列化的。我的理解在這裏有點朦朧,但不是xsd.exe有點像svcutil.exe的老版本? – 2013-05-01 08:19:10

+1

關於正確的聲音,有許多公用事業因IList不可序列化而導致傳統上被視爲不良設計的實用程序。是否可以公開具體的List?這被認爲是不好的形式,但在實體類中它應該沒問題。如果我們被迫採取這種做法,例如爲了保持休息狀態,實體實際上就是DTO,所以暴露具體List 的後果被減輕了,因爲我們只使用DTO作爲桶來傳遞數據英寸公共列表是皺眉,因爲他們不能告訴類如果他們改變。 – 2013-05-01 08:35:15