2010-02-02 96 views
0

我正在使用AMO in c#構建SSAS多維數據集。爲此,我想獲取服務器,多維數據集,維度等的類的公共屬性列表。這將是我的超集,用戶必須從中提供強制屬性,並可以提供可選屬性。使用XSD.exe生成XSD

我想生成一個XSD架構。我跑以下命令

XSD C:\windows\assembly\GAC_MSIL\Microsoft.AnalysisServices\10.0.0.0__89845dcd8080cc91\Microsoft.AnalysisServices.DLL /dataset /element:Cube /out:c:\temp\gac

,並得到這個錯誤

Error: There was an error processing 'C:\windows\assembly\GAC_MSIL\Microsoft.AnalysisServices\10.0.0.0__89845dcd8080cc91\Microsoft.AnalysisServices.DLL'. 
    - There was an error reflecting type 'Microsoft.AnalysisServices.ModelComponent'. 
    - Cannot serialize member 'System.ComponentModel.Component.Site' of type 'System.ComponentModel.ISite', see inner exception for more details. 
    - Cannot serialize member System.ComponentModel.Component.Site of type System.ComponentModel.ISite because it is an interface. 

我該怎麼做,以便正確生成的架構?

回答

1

有幾件事情我想知道讀了這個問題時:

  • 爲什麼有/數據集的選項。在將XSD轉換爲代碼時,這只是有用的。你似乎正在(編譯)代碼到XSD中。 (數據集與DTOc類的生成)
  • 爲什麼要有/元素選項。轉化的XSD成代碼時,這是唯一有用的(子選擇元件(一個或多個),以生成用於在源模式不是所有的元素代碼)

那麼,爲什麼會出現問題是,這個庫包含的類型,其中具有公共字段/屬性的接口類型(在這種情況下是ISite)。

XmlSerializer無法序列化接口,它需要具體的類型。因此你失敗了。

目標很明確,但恐怕您將無法使用XSD.exe工具。由於您的一個必需對象(Cube)具有ISite類型的公共屬性,因此這將始終會破壞XMLSerializer。

我猜你最好的選擇是AnalysisServices SDK(也許他們提供了這個對象模型)或...(哎喲)使用反射自己想要的屬性字段的一個子集生成的類型任何接口類型。

希望這有助於

+0

問題編輯追加目標 – 2010-02-16 15:08:39

+0

這將是很好,如果XSD.EXE至少可以創建一個代表的ISite性質的抽象類型;如果能夠分析在提供的程序集中實現ISite的所有具體類並使用它們生成擴展了ISite基本類型的具體XSD類型,那麼更好。也許有更多空閒時間的人可以寫這樣的東西...... :-) – 2011-12-21 21:24:49

2

解決方案是指導XSD.EXE跳過你的問題的成員(在你的情況「System.ComponentModel.Component.Site」)的序列化。 要做到這一點添加類的成員,使該問題之前,以下屬性:

[System.Xml.Serialization.XmlIgnore]