使用 xsd.exe 或 svcutil.exe 对 UWP 和 Xamarin 进行 C# XML 序列化

Posted

技术标签:

【中文标题】使用 xsd.exe 或 svcutil.exe 对 UWP 和 Xamarin 进行 C# XML 序列化【英文标题】:C# XML Serialization for UWP and Xamarin with xsd.exe or svcutil.exe 【发布时间】:2017-05-24 23:42:33 【问题描述】:

我有一个相对复杂的 xml 文件,我想将其用作序列化和反序列化的模板。因为它可能会随着时间的推移而改变和增长,我有点希望我可以依赖通过 xsd.exesvcutil.exe 生成的代码。 但遗憾的是,我无法让它在 XamarinUWP 中轻松运行。 UWP 似乎不支持默认的 xml 内容,所以我不得不使用 svcutil.exe 来获取带有 DataContract-Attributes 的文件。

问题在于 Xamarin 中缺少 System.Runtime.Serialization.XmlSerializableServices.AdDefaultSchema() 方法,而在 UWP 中整个类 System.Runtime.Serialization.XmlSerializableServices不见了。

有没有办法自动生成 Xamarin 和 UWP 的代码? 如果不是,还有什么方法可以在两个系统中轻松解析 xml,或者我应该自己做吗?

【问题讨论】:

为什么不使用XmlReader 如果xsd有变化,我可以再次自动生成模型进行序列化和反序列化。否则我将不得不调整 xsd,自己进行部分解析并调整模型。至少我现在是这么看的。 您是否要求在 xamarin 中以编程方式为您的复杂 xml 文件生成类模型的方法? 其实我一直在寻找一种方法来为 xamarin 和 uwp 创建它们。实际上它适用于 xsd.exe。在下面发布答案。 【参考方案1】:

我在以下帖子中找到了答案:

how can i use the file that is generated by xsd.exe in windows 10 universal app

我现在只是使用 xsd.exe 来创建一个带有模型的 *.cs 文件,这对于 xamarin 来说可以正常工作,而无需任何额外的工作。对于 uwp 项目,我现在只是从另一个项目链接文件并添加一些“虚拟”代码,就像上面的帖子一样。

namespace System

    internal class SerializableAttribute : Attribute
    
    

namespace System.ComponentModel

    internal class DesignerCategoryAttribute : Attribute
    
        public DesignerCategoryAttribute(string _)  
    
  

这种方式似乎工作得很好,这意味着如果 xsd 有变化,我可以用模型生成一个新的 *.cs 文件,而不必自己处理这些变化。

【讨论】:

以上是关于使用 xsd.exe 或 svcutil.exe 对 UWP 和 Xamarin 进行 C# XML 序列化的主要内容,如果未能解决你的问题,请参考以下文章

svcutil.exe 未为 minOccurs=0 生成指定字段

WCF 使用SvcUtil.exe生成客户端代码和配置

为啥 svcutil.exe 的 /reference 选项不起作用?

快速创建WCF服务和svcutil.exe工具使用

WCF通过SVCUtil.exe生成客户端代理类和配置文件(转)

无法在 Mono 中编译 svcutil 生成的 C#