【问题标题】:Reference C# type within XML schema?在 XML 架构中引用 C# 类型?
【发布时间】:2015-09-06 03:04:33
【问题描述】:

是否可以在 XML Schema 文件中引用 C# 项目中的类型?对于验证和智能,我的意思是......

假设我有以下内容:

namespace Example
{
  class myType
  { int test = 0; }
}

如何在架构文件中引用 Example 命名空间,以便可以将 myType 用作元素类型?

【问题讨论】:

    标签: c# xml namespaces xml-namespaces


    【解决方案1】:

    不直接。

    不过有两种方法可以做到这一点。

    首先是将您的类标记为Serializable,并使用XmlSerializer 将其序列化为XML。与此相结合,您还可以使用xsd.exe 为您的类创建架构,并且 that 可以用作您(其他)架构中的类型。 XmlSerializer 可用于对该类型进行序列化和反序列化。

    在一些相关的说明中,如果您想要在 XML 中捕获一个 方法(而不是数据类型或结构),您可以使用 C#(或 VB)扩展一些 XSLT .NET 或 JavaScript)代码。 MSDN 有更多关于如何做到这一点的文档,基本思想是使用 XsltArgumentList 和 AddExtensionObject 添加该方法。也可以使用 msxsl:script 直接在 XSLT 中执行此操作(有关详细信息,请参阅 here)。

    【讨论】:

    • 我刚刚尝试了 xsd.exe 类似的东西:“xsd D:\somelib.dll /t:SomeNS.SubNS.SomeClass” 但是,它似乎通过每一个类,如果我不有一个默认构造函数(主要是故意设计的),整个过程都会失败。有什么办法让它忽略反射错误?
    • 要序列化/反序列化一个类,它必须有一个可公开访问的默认(无参数)构造函数——即使该构造函数什么都不做,也没有在其他任何地方使用。您应该能够使用 XSD.exe 的 /t 参数将其限制为您想要序列化的类型。
    • 啊,好的。谢谢!现在我为每个类实现了默认构造函数,这很好。
    猜你喜欢
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    相关资源
    最近更新 更多