簡體   English   中英

從 XML 模式文件 (xsd) 生成 C# 9 個類,包括現代功能(大部分為空值)

[英]Generate C# 9 classes from an XML schema file (xsd), including modern features (nullables mostly)

我必須在我們的應用程序中實現對 ISO20022 文件格式的支持,而 Visual Studio 2022 提供的“xsd.exe”工具令人沮喪地不足。

最令人沮喪的一點是在生成的代碼中缺乏對可空類型的正確支持:當 XML 元素被標記為“可選”時,生成的代碼應該在目標 class 中正確地生成一個可空的成員。相反,它會生成一團亂麻兩個字段(MemberName 和 MemberNameSpecified}。

這使得處理結果的代碼比應有的可讀性更差,而且更容易出錯。

另一個痛點是缺少對相關模式的支持:存在各種版本的 ISO2022 XML 模式文件,金融實體通常不支持它們。 由於 xsd.exe 工具不允許(據我所知)將多個 XSD 和命名空間映射到單個 C# 命名空間中,因此規范中的相同元素生成相同的對象,但在不同的 C# 命名空間中。 這迫使我們為不同命名空間中的相同對象剪切和粘貼相同的代碼。

有沒有辦法讓 XSD.exe 從 XML shema 生成“現代”class?

是否有其他工具可以滿足要求(付費工具只要能完成工作就可以)。

C#/.NET(包括 Core + Framework)有 2 個非常好的開源和免費選項:

  • https://github.com/mamift/LinqToXsdCore

    回到 2008 年,Microsoft 確實致力於改進 XSd.exe,他們發布了一個名為 LinqToXsd 的后繼工具,它在許多方面改進了 XSD.exe。 它已移植到 .NET Core 並支持多個命名空間(導入 + 包含),並向生成的代碼添加#nullable enable annotations 此工具生成與 XSD.exe截然不同的 .NET Standard 2 代碼,並嘗試比 XSD.exe 更接近 model 架構。 在此處查看一些示例代碼。

  • https://github.com/mganss/XmlSchemaClassGenerator

    這個項目較新,並且通過AllowNullAttributeMaybeNullAttribute而不僅僅是#nullable pragma 更好地支持#nullables。 該項目還可以從元素和屬性組生成接口,這在您需要時非常有用,XSD.exe 和 LinqToXsdCore 都不支持。 此工具還會生成看起來更接近 XSD.exe 給您的代碼。

在做出決定之前,您可能想擺弄他們兩個。 但我建議使用 XmlSchemaClassGenerator,除非您有基於 LinqToXsd 的舊 .NET 框架版本的遺留代碼,否則 LinqToXsdCore 更兼容,因為它是一個直接的端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM