使用 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.exe 或 svcutil.exe 生成的代码。 但遗憾的是,我无法让它在 Xamarin 和 UWP 中轻松运行。 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 生成指定字段
为啥 svcutil.exe 的 /reference 选项不起作用?