0

我正在c# 中使用 AMO构建 SSAS 多维数据集。为此,我想获取服务器、多维数据集、维度等类的公共属性列表。这将是我的超集,用户必须从中提供强制属性并且可以提供可选属性。

我正在尝试生成 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.

我该怎么做才能正确生成架构?

4

2 回答 2

2

解决方案是指示 XSD.exe 跳过有问题的成员的序列化(在您的情况下为“System.ComponentModel.Component.Site”)。为此,在产生问题的类成员之前添加以下属性:

[System.Xml.Serialization.XmlIgnore]
于 2014-07-17T17:37:24.307 回答
1

阅读这个问题时,我想知道一些事情:

  • 为什么有 /dataset 选项。这仅在将 XSD 转换为代码时有用。您似乎正在将(编译的)代码放入 XSD。(数据集与 DTOc 类生成)
  • 为什么有 /element 选项。这仅在将 XSD 转换为代码时有用(子选择要为其生成代码的元素,而不是源模式中的所有元素)

然后,问题出现的原因是该库包含类型,这些类型具有接口类型的公共字段/属性(本例中为 ISite)。

XmlSerializer 不能序列化接口,它需要具体类型。因此,你得到的失败。

目标很明确,但恐怕您将无法使用 XSD.exe 工具。由于您所需的对象之一(多维数据集)具有 ISite 类型的公共属性,因此这将始终破坏 XMLSerializer。

我猜你最好的选择是AnalysisServices SDK(也许他们为你提供了这个对象模型)或者......(哎哟)你自己对你想要生成的类型进行反射,其中包含属性字段的子集,而忽略了任何接口类型。

希望这可以帮助,

于 2010-02-15T17:35:22.063 回答