我正在使用AMO in c#构建SSAS多维数据集。为此,我想获得Server,Cube,Dimension等类的公共属性列表。这将是我的超集,用户必须从中提供强制属性,并且可以提供可选属性。
我正在尝试生成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.
我该怎么做才能正确生成架构?
答案 0 :(得分:2)
解决方案是指示XSD.exe跳过您有问题的成员的序列化(在您的情况下,' System.ComponentModel.Component.Site')。 为此,请在产生问题的类成员之前添加以下属性:
[System.Xml.Serialization.XmlIgnore]
答案 1 :(得分:1)
在阅读这个问题时我想知道一些事情:
然后,出现问题的原因是该库包含类型,这些类型具有带接口类型的公共字段/属性(在本例中为ISite)。
XmlSerializer无法序列化接口,它需要具体的类型。因此你失败了。
目标很明确,但我担心你将无法使用XSD.exe工具。由于您的一个必需对象(Cube)具有ISite类型的公共属性,因此它将始终破坏XMLSerializer。
我猜你最好的选择是AnalysisServices SDK(可能是他们为你提供这个对象模型)或者...(ouch)自己使用反射你希望用属性的子集生成的类型 - 字段留下任何界面类型。
希望这有帮助,