天道酬勤,学无止境

XSD.exe 和“循环组引用”(XSD.exe and "Circular Group references")

问题

我正在尝试构建一些类,以便我可以反序列化由第三方应用程序创建的 XML 文件。 幸运的是,第 3 方应用程序的开发人员在他们的代码中包含了一个模式文件,以便可以理解 XML 文件。

当我从 Visual Studio 使用 XSD.exe 工具时,进程失败报告以下错误

“来自 targetNamespace='' 的组 'SegGroupOrSegmentGrouping' 的定义无效:循环组引用。”

任何有关如何根据此错误生成类文件的帮助将不胜感激。 可以在此处找到架构文件的副本:架构文件

回答1

尝试使用svcutil ; 它可以处理循环引用。

在以下示例中, eExact-Schema.xsdxsd.exe无法处理的 XSD。

例子:

C:\SRC\Exact>svcutil eExact-Schema.xsd /language:C# /dataContractOnly /importxmltypes /out:exact.cs

这总是一个很好的起点; 您现在可以使用这个类并根据您的风格/需要进行更改,添加评论等,这将为您节省大量时间/搜索而不是从头开始。

回答2

我最近遇到了同样的问题,

我从第三方公司获得了一个架构,他们从 Web 服务返回一个 xml 结构。 然后我想反序列化响应并将信息存储到带有 NHibernate 的数据库中。

没问题,我以为我会只使用 xsd.exe 并且我会上课。 不幸的是,事实并非如此。 Xsd.exe 失败,错误与您遇到的完全相同。 这是因为它无法解析循环引用。

我花了好几天的时间寻找替代方案,直到最后我将自己的类结构写入模式并能够完美地反序列化。 这里的答案是编写您自己的 C# 类并使用适当的属性装饰它们。

为自己节省一些时间和心痛,不要继续尝试并最终自动生成您需要的类,尽管您编写的类耗时不会做出大多数工具(不能完美工作)会让您做出的妥协制作。

我花了大约 3 天的时间来编写类结构(它很大),但我最终得到了一个高质量的解决方案。

有一件事是肯定的,您将无法使用 xsd.exe 和我在谷歌搜索后尝试过的大多数其他工具,要么无法正常工作,要么有问题。

回答3

在尝试了几个第三方工具后,我发现 Liquid Technologies 有一个非常强大的生成器,称为 Liquid XML Data Binder 2012。它能够处理我面临的循环组引用问题。 从 2.0 开始,它几乎可以为 .net 的任何版本生成代码。 它生成的类确实依赖于它们提供的可再发行 dll。 我正在使用试用版,如果在我发布之前需要购买完整版,我不会感到惊讶。 然而,已经为我节省了大约一百个小时或更长时间的容易出错的手工编码,我不能抱怨。

回答4

对我来说最简单的方法是使用 XSD.EXE 从实际的 XML 文件创建 XSD 文件。 然后从新的 XSD 文件创建一个类。 如果引入了原始 XML 中不存在的节点或类型,您可能需要定期修改类,但您将节省数小时的编码时间!!!!

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 尝试将 WSDL 导入 Visual Studio 2013 时出现循环引用错误(Circular reference error while trying to import WSDL into Visual Studio 2013)
    问题 在 Microsoft Visual Studio 2013 中导入描述 SIRI Web 服务的 WSDL 文件时,出现错误: 警告 5 自定义工具警告:无法导入操作 GetProductionTimetable 中名为 FaultName 的故障。 不受支持的 WSDL,故障消息部分必须引用一个元素。 此故障消息未引用元素。 如果您对 WSDL 文档具有编辑权限,则可以通过使用“元素”属性引用架构元素来解决问题。 C:\path\to\TransportationDemo\TransportationDemo\Service References\ServiceReference\Reference.svcmap 1 当使用由以色列交通部创建的 WSDL 的修改版本时,它删除了很多方法,我得到另一个错误(以及其他错误): 警告 5 自定义工具警告:无法导入 wsdl:portType 详细信息:运行 WSDL 导入扩展时引发异常:System.ServiceModel.Description.XmlSerializerMessageContractImporter 错误:来自 targetNamespace='http://www.siri.org.uk/siri' 的组“ServiceDeliveryBodyGroup”的定义无效:循环组引用。 错误源的 XPath:/
  • XSD.exe and "Circular Group references"
    I am attempting to build some classes so that I can deserialise an XML file created by a third party application. Luckily the developer of the 3rd party application included a schema file with their code so that the XML file can be understood. When I use the XSD.exe tool from Visual Studio the process fails reporting the following error "Group 'SegGroupOrSegmentGrouping' from targetNamespace='' has invalid definition: Circular group reference." Any help in how I can generate the class files in light of this error would be appreciated. A copy of the schema file can be found here : schema file
  • XSD.exe 不强制 minOccurs(XSD.exe doesn't enforce minOccurs)
    问题 我有一个简单的架构,我将 minOccurs 和 maxOccurs 声明为 1。当我运行 XSD.exe 以生成 C# 类并在代码中使用该类时; 该字段不是强制执行的。 是否缺少一些额外的步骤? 还是使用 XSD.exe 生成的类不是必填字段? 任何建议或见解都会有所帮助。 回答1 就像 Visual Studio 中的 Xml/infer 模式工具一样,每当我使用 XSD.exe 时,我最终都会修复一些生成的代码。 XSD.exe 做了一个很好的近似,但它并不完全有效。 minOccurs / maxOccurs 'bug' 记录在 MSDN 上。 从 XML 架构文档生成源代码时,Xsd.exe 会忽略应用于 <choice>、<sequence>、<group>、<all> 和 <any> 元素的 minOccurs 属性。 对于元素,如果 maxOccurs 属性的值大于 1 或无界,Xsd.exe 将忽略 minOccurs 属性。 在这种情况下,该工具会生成与 XSD 数据类型对应的类型的数组。 Xsd.exe 使用 maxOccurs 属性的值来确定是生成单个实例还是数组。 对于元素,如果 minOccurs 属性应用于转换为 .NET Framework 引用类型的架构数据类型,则 Xsd.exe 也会忽略该属性。 只有当以下所有条件都为真时,Xsd.exe
  • xsd 警告和错误转换为 c# 类(xsd warning and error converting to c# class)
    问题 我正在尝试将以下 XML 标准转换为 C# .NET 类: https://services.mesa.org/ResourceLibrary/ShowResource/0f47758b-60f0-40c6-a71b-fa7b2363fb3a 我已经下载了这个包(https://services.mesa.org/ResourceLibrary/ShowResource/0f47758b-60f0-40c6-a71b-fa7b2363fb3a),解压了已填充的 Schema 文件并将其移动到一个空的 Schema 文件夹中。 我让他们打开 Visual Studio 2012 开发人员提示并发出: xsd AllSchemas.xsd /c 在此之后,发生了schema validation warning reference to undeclared attribute group' (已翻译) schema validation warning reference to undeclared attribute group'几个schema validation warning reference to undeclared attribute group' ,如下所示: Microsoft (R) Xml Schemas/DataTypes support
  • XSDObjectGen.exe和XSD.exe(XSDObjectGen.exe vs XSD.exe)
    问题 谁能告诉我XSDObjectGen.exe和XSD.exe有什么区别? 有什么方法可以使XSDObjectGen.exe在点网2.0中工作? 回答1 另外,还有Xsd2Code。 一些功能: 生成局部类。 支持通用和自定义集合(List,ObservableCollection,MyCustomCollection)。 当不需要特殊的获取或设置时,支持自动属性。 可以生成WCF属性(DataContract / DataMember)。 支持可修剪类型。 屏蔽IDE中的私有字段(使用EditorBrowsableState.Never属性)。 在构造函数中生成对象分配。 实现INotifyPropertyChanged以启用wpf或Silverlight的数据绑定。 通过Visual Studio外接程序提高生产力。 从xsd批注生成摘要文档。 在引发属性更改事件之前,请检查新值和旧值int setter是否相同。 在cs或vb标头中生成备份选项。 将Xml文档保存并加载到Silverlight应用程序的隔离文件存储中(3.0中的新增功能)。 生成CS,VB或CPP代码。 序列化/反序列化对象。 保存到文件并从文件加载。 包括Xsd2CodeCustomTool。 回答2 区别在于: XML架构定义工具( xsd.exe )是Visual Studio SDK的一部分
  • svcutil.exe 是 xsd.exe 的替代品吗?(Is svcutil.exe a replacement for xsd.exe?)
    问题 我正在使用 xsd.exe 从 .xsd 文件生成一些 c# 类。 我遇到了相同的问题,这里和其他站点上都提到了 xsd.exe 生成 Type[] 数组而不是 .xsd 文件中类型的泛型 List 集合。 有人建议,如果您将 /dataContractOnly 参数传递给 svcutil.exe,则 svcutil.exe 可以用作 xsd.exe 的替代品。 但是,这些人似乎错了,因为 svcutil.exe 实际上生成 System.Xml.XmlNode[] 数组属性,而不是根据 .xsd 文件中的架构创建类型。 例如,给定这个简单的 .xsd 架构: <?xml version="1.0" encoding="utf-8"?> <xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:mstns="http://tempuri.org/XMLSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" > <xs:complexType name="Employee"> <xs:all> <xs
  • 在 C# 中从 XML Schema 生成代码有什么限制?(What are the limits to code generation from XML Schema in C#?)
    问题 我已经看到了几个关于使用xsd.exe从 XML 模式生成类的问题的问题,以及关于如何预处理模式(通常使用 XSLT)以在生成之前解决一些棘手方面的建议。 我的问题是是否有可能构建一个 100% 符合 XML Schema 的 C# 代码生成器。 xsd.exe的问题仅仅是它的实现问题,还是指出 XML Schema 和 C# 之间存在根本的不一致? 特别是,我对如何将 XML Schema 中的概念映射到 C# 感兴趣 - 什么是可接受的映射,哪些映射是有争议的,是否存在本质上不可映射的 XML Schema 构造以及是否存在未充分利用的 C# 构造? 是否有提供映射规则的合规性规范,以便可以实施和测试? 编辑:为了清楚起见,我完全知道 XML Schema 不会为我提供完全实现的 C# 接口,我对它是否可以完全映射到 C# 类层次结构感兴趣。 编辑 2:我添加了一个小赏金,因为我有兴趣获得更多细节。 编辑 3:赏金仍然开放,但到目前为止朝着 stakx 前进 - 一个很好的答案,但主要处理如何在 XML 模式中复制 C# 结构,而不是相反。 好的输入虽然。 回答1 有趣的问题。 不久前,我想知道完全相同的事情。 我将展示几个例子来说明我有多远。 我的演示并不完整(考虑到 XML Schema 规范相当全面),但它应该足以展示...... 您可以比xsd.exe
  • 从已知的 XSD 生成 .Net 对象(Generate .Net objects from known XSD)
    问题 我有一些 XSD-s 来定义我的对象层次结构。 例如 math.xsd, base.xsd 而 math.xsd 依赖于 base.xsd。 我需要从那些 xsd-s 生成类。 我已经阅读了这两个工具:CodeXS 工具和 XSD.exe。 xsd.exe 的问题是我没有成功地从两个相互依赖的 xsd-s 生成类。 有没有人知道在这种情况下使用 xsd.exe 的正确参数? 此外,我正在寻找: - 更多工具 - 这些工具之间的比较 - 使用 .net 3.5 的 xsd 对象 谢谢。 回答1 您没有理由不能使用xsd.exe使用的相同方法,但随后针对生成的 CodeDOM 模型运行您自己的代码以在将 .cs 文件写入磁盘之前进行所需的修改。 一般的想法是将 XSD 文件加载到XmlSchema对象中,然后使用内部XmlCodeExporter和XmlSchemaImporter类来填充 CodeDOM 命名空间。 完成此操作后,您可以自由地对 CodeDOM AST 进行任何需要进行的调整,然后将其写入磁盘。 例如。 XmlSchema schema = null; // Load XSD file here var schemas = new XmlSchemas(); schemas.Add(schema); var ns = new CodeNamespace {
  • XSD.exe - 如何初始化从 xs:choice 创建的类型(XSD.exe - How to initialize a type created from xs:choice)
    问题 我对使用 XSD 和序列化反序列化还很陌生,我正在寻找一些关于如何初始化从 XSD 中的 xs:choice 元素创建的结果类对象的建议,这里有一些关于 XSD 的信息和对象类: 示例取自更大的 XSD 对象类。 XSD: <xs:element name="main-contact"> <xs:complexType> <xs:sequence> <xs:choice> <xs:element name="person"> <xs:complexType> <xs:group ref="person"/> </xs:complexType> </xs:element> <xs:element name="company"> <xs:complexType> <xs:group ref="company"/> </xs:complexType> </xs:element> </xs:choice> <xs:group ref="contact"/> </xs:sequence> </xs:complexType> </xs:element> <xs:group name="person"> <xs:sequence> <xs:element name="title" minOccurs="0"/> <xs:element name="salutation" minOccurs
  • 在Windows 8的Visual Studio 2013中的哪里可以找到xsd.exe(where to find xsd.exe in visual studio 2013 on windows 8)
    问题 我已使用Visual Studio 2003和2008的xsd.exe实用程序从第三方XSD文件生成类型化的数据集。 第三方已更改其架构,因此我需要重新生成数据集,但找不到XSD.EXE 。 win8搜索为我提供了有关实用程序的信息,但没有提供实用程序的位置,我在Windows资源管理器中尝试了搜索,但未获得任何结果。 我读了有关Win7/VS 2008帖子,说它是WinSDK的一部分,但我也不能在该文件夹中找到它。 一些发布者说,现在需要从哪里下载它。 我正在运行64 bit Windows 8 pro和Visual Studio 2013 Ultimate 。 回答1 安装SDK *(手动或与Visual Studio一起安装)后,您将在以下目录中找到它: SDK 8及更高版本 还有一个附加的FX版本子目录: %programfiles(x86)%\Microsoft SDKs\Windows\{ver}\bin\{FXVer} Tools 在哪里 {ver}是SDK版本(例如v8.1A ) 而{FXVer}是适用的.Net Framework版本,例如NETFX 4.0v 例如 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools C:\Program Files (x86)
  • 为什么XSD.EXE创建两个.XSD文件,以及如何使用它们?(Why does XSD.EXE Create Two .XSD Files, and How to Use Them?)
    问题 我正在使用以下命令从输入的XML文件-response.xml生成相关的xsd文件,我的困惑是(1)为什么有两个xsd文件输出(response.xsd和response_app1.xsd),我认为应该有其中只有一个产生了? (2)如果需要使用xsd / classes生成C#类文件,应该使用哪个xsd文件? 我的环境:VSTS 2008 + C#+ .Net 3.5。 D:\>xsd response.xml Microsoft (R) Xml Schemas/DataTypes support utility [Microsoft (R) .NET Framework, Version 2.0.50727.3038] Copyright (C) Microsoft Corporation. All rights reserved. Writing file 'D:\response.xsd'. 这是我的输入XML文件和输出XSD文件, http://www.mediafire.com/file/kzzoxw0zwgq/inputoutput.zip 编辑1: 当我执行xsd response.xsd生成相关的C#类时,出现错误消息,下面是详细的输出, D:\>xsd response.xsd /classes Microsoft (R) Xml Schemas
  • 从XSD生成DataContract(Generate DataContract from XSD)
    问题 我希望能够从XSD文件生成DataContract ,最好使用xsd.exe工具。 自动在每个项目上生成[DataContract]和[DataMember]的最简单方法是什么? 还是有更好的方法? 我试图避免每次更改和重新生成XSD文件时都必须重新创建数据协定。 回答1 xsd.exe工具早于WCF,并且对[DataContract]和[DataMember]一无所知。 如果确实使用xsd.exe ,则必须切换WCF以使用XmlSerializer而不是其默认的DataContractSerializer来序列化数据协定。 xsd.exe的WCF等效xsd.exe是svcutil.exe-它具有一个/dconly参数,该参数仅根据给定的XSD文件创建数据协定。 这将为您生成一个C#或VB.NET文件,其中包含注释清楚的数据协定。 用法: svcutil.exe (name of your XSD).xsd /dconly 这将在您的目录中生成一个具有相同基本名称的* .cs文件。 以我的经验, svcutil.exe对其XML结构非常挑剔-因此,如果它因大量的警告和/或错误而向您咆哮,请不要感到惊讶。 回答2 使用svcutil.exe而不是xsd.exe 如何使用 ? 转到“开始”菜单-> Microsoft Visual Studio 2008-> Visual
  • .NET 有没有 BPMN 2.0 解析器?(Is there any BPMN 2.0 Parser for .NET?)
    问题 一般来说,我正在寻找一种对业务流程进行建模的方法。 我经常发现 UML 和 BPMN 作为这个问题的答案。 现在我想用一个程序检查这个模型。 只有 UML 规范这些元素应该是什么样子,而不是应该如何保存这些不同的模型。 这就是我仔细研究 BPMN 的原因。 对象管理组有一个 BPMN 2.0 规范。 我下载了一个 BPMN 编辑器并开始使用这个符号。 现在我想开始编写一个程序来检查这个 BPMN 2.0 文件(更准确地说,它们是 xml 文件)。 是否有任何与此 BPMN 配合使用的 .NET 框架和/或实现? 我只是不想为此编写自己的扩展 XML 解析器。 如果不是:还有哪些其他模型可用于对此类模型进行编程检查? 关于检查:我想搜索是否可以在模型中找到不同类型的信息,如果找不到这些信息,则发出警告。 回答1 似乎没有适用于 .NET 的 BPMN 2.0 Parser,但是使用 xsd.exe,这是 Microsoft SDK 的一部分,您可以自己创建一个,而不仅仅是 BPMN。 怎么做: 从 omg 下载 5 个 xsd 文件:http://www.omg.org/spec/BPMN/2.0/ 并将它们放在同一文件夹中。 使用四个参数运行 xsd.exe: xsd.exe DC.xsd DI.xsd BPMNDI.xsd BPMN20.xsd /classes
  • 在C#项目中使用XSD Build任务(Use XSD Build task in c# project)
    问题 如何在ac#项目中使用c ++ XSD任务? 我已经在csproj文件中创建了任务,如下所示: <Target Name="BeforeBuild"> <XSD Namespace="$(RootNamespace).Xml" Language="CS" GenerateFromSchema="classes" Sources="Xml/schema.xsd" /> </Target> 但是构建输出显示,尽管intellisense在编辑项目文件时为我提供了XSD任务: Error 1 The "XSD" task was not found. Check the following: 1.) The name of the task in the project file is the same as the name of the task class. 2.) The task class is "public" and implements the Microsoft.Build.Framework.ITask interface. 3.) The task is correctly declared with <UsingTask> in the project file, or in the *.tasks files located in the "C
  • 为 C# 生成的 XML 文档的 XSD? [关闭](XSD for XML documentation generated for C#? [closed])
    问题 关闭。 此问题不符合 Stack Overflow 准则。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其成为 Stack Overflow 的主题。 3年前关闭。 改进这个问题 有谁知道某处是否有 XSD 文件可用于验证使用 /doc 选项编译 C# 项目时生成的 XML 文档? 我想在文件生成后手动修改它,我正在寻找一种简单的方法来确认我没有损坏文件的结构。 谢谢。 回答1 我终于崩溃了,写了一篇:XSD for Xml Comments for .NET Documentation 回答2 今天偶然发现了这个老问题。我没有通过查看 Microsoft 的文档看到这一点,也没有在查看我认为可能对开发此类架构感兴趣的其他项目时看到这一点; 即 Sandcastle 和(长期不存在的)NDoc 项目的来源。 除了退后一步尝试自己定义模式之外,我建议的一件事是使用将从 XML 生成 XSD 的众多工具之一。 Microsoft 将 XSD.EXE 作为 Visual Studio 及其 SDK 的一部分。 您可以编写练习每个 XML 文档注释标记的虚拟源代码,为其构建 XML 文档文件,然后使用XSD.EXE 。 从中生成 XSD,并在处理完成后使用它来验证 XML 文档。 但我认为这可能没有听起来那么简单。 此外,XML 文档注释涉及类型和代码元素
  • 我应该如何在 msbuild 脚本中引用 sn.exe?(How should I reference sn.exe in msbuild script?)
    问题 我需要在构建完成后重新签署我的程序集(并且我已经对它做了一些其他的事情),所以我开始添加一个名为C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe的<Exec>任务C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe 。 这必须适用于其他开发人员/环境,所以我希望我可以从该文件夹中复制sn.exe和sn.exe.config并将其存储在我们的代码存储库中,以便我始终可以从已知版本调用它的通用版本地点。 sn.exe在 sdk 目录之外sn.exe崩溃,所以我想知道如何在不知道它将位于什么路径下的情况下引用它。 不同的人有不同的环境(x86 与 x64,不同的安装目录,不同的版本),所以我希望能够轻松引用该工具的最新版本(或者任何版本)。 似乎是一个足够简单的工具,也许还有另一种方法可以使用另一个工具/命令/msbuild 任务对程序集进行签名? 任何帮助,将不胜感激。 回答1 要以适合大多数人的方式在 msbuild 脚本中正确引用sn或sqlmetal (我所追求的)之类的工具,您必须考虑操作环境和框架实现的不同方面。 主要有两种情况:Microsoft
  • 如何仅从XML生成JAXB类(How to generate JAXB classes from just XML)
    问题 我需要从不提供架构的xml生成类。 我知道这几乎没有用,但是事实是我们有xml,它是结构化的,我们应该能够从xml创建模型。 在过去,我是手工完成的,但是我正在使用的当前xml文档非常大,我的时间可能最好花在构建满足我需要的内容上。 但是,我猜它已经完成了,但是我找不到。 有指针吗? 回答1 假设几乎所有内容都为字符串类型,则有许多可用的工具(可以通过Google进行快速的Google搜索来找到您)可以从XML生成XSD。 您应该能够使用该XSD运行JAXB来获取类。 这是一个在线工具,可让您执行此操作。 这是一个屏幕截图: 回答2 从xml文件中,您可以创建XML架构定义(XSD)文件。 拥有XSD后,您将能够生成代码,并需要将其用于Java,C#,C ++或以上所有代码。 如果您拥有Visual Studio,则可以使用xsd.exe生成XSD文件。 参考: www.xmlforasp.net/CodeBank/System_Xml_Schema/BuildSchema/BuildXMLSchema.aspx msdn.microsoft.com/zh-CN/library/x6c1kb0s(v=vs.71).aspx 命令语法:xsd file.xml [/ outputdir:directory] 因此, “ C:\ Program Files \ Microsoft
  • XSD.exe - How to initialize a type created from xs:choice
    I'm fairly new to working with XSD's and serialization de-serialization, I'm looking for some advice on how to initialise the resulting class object created from a xs:choice element in the XSD, to start here's some info on the XSD and Object class: Examples taken from a larger XSD, object class. XSD: <xs:element name="main-contact"> <xs:complexType> <xs:sequence> <xs:choice> <xs:element name="person"> <xs:complexType> <xs:group ref="person"/> </xs:complexType> </xs:element> <xs:element name="company"> <xs:complexType> <xs:group ref="company"/> </xs:complexType> </xs:element> </xs:choice> <xs
  • ShouldSerialize *()与*指定的条件序列化模式(ShouldSerialize*() vs *Specified Conditional Serialization Pattern)
    问题 我知道ShouldSerialize *模式和* Specified模式以及它们如何工作,但是两者之间有什么区别吗? 当某些事情应该有条件地序列化时,是否存在使用一种方法相对于另一种方法的“陷阱”? 此问题特定于XmlSerializer的用法,但是也欢迎您提供有关此主题的一般信息。 关于此主题的信息很少,可能是因为它们执行的目的完全相同,这是一种样式选择。 但是,.NET实现者会通过反射来分析类并查找任何一种/两种模式来确定所生成的序列化器的行为,这似乎很奇怪,因为除非这是一个向后兼容的构件,否则它会减慢序列化器的生成。 编辑:对于那些不熟悉两种模式的人,如果*Specified属性或ShouldSerialize*方法返回true,则该属性将被序列化。 public string MyProperty { get; set; } //*Specified Pattern [XmlIgnore] public bool MyPropertySpecified { get{ return !string.IsNullOrWhiteSpace(this.MyProperty); } } //ShouldSerialize* Pattern public bool ShouldSerializeMyProperty() { return !string
  • 将XML字符串转换为对象(Convert XML String to Object)
    问题 我正在通过套接字接收XML字符串,并希望将它们转换为C#对象。 消息的形式为: <msg> <id>1</id> <action>stop</action> </msg> 我是.Net的新手,不确定执行此操作的最佳实践。 我以前使用过Java的JAXB,但不确定是否存在类似的东西,或者是否会以其他方式处理。 回答1 您需要使用xsd.exe工具,该工具随Windows SDK一起安装到类似于以下内容的目录中: C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin 在64位计算机上: C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\bin 在Windows 10计算机上: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin 在第一次运行时,您使用xsd.exe并将示例XML转换为XSD文件(XML模式文件): xsd yourfile.xml 这将为您提供yourfile.xsd ,在第二步中,您可以使用xsd.exe再次将xsd.exe转换为C#类: xsd yourfile.xsd /c 这应该给您一个文件yourfile.cs ,其中将包含一个C#类,您可以使用该类反序列化所获取的XML文件-类似于: