如何将 XML 的 XSD 定义转换为 C# 类

当我们将一些配置数据存储在 XML 文档中,或希望自定义某种 XML 格式的文档时,最好先去定义 XML 对应的 XSD 规范。定义 XSD 后,我们不仅可以在 VS 等 IDE 中对相应的 XML 文件的语法进行自动检查或属性匹配,同时也可以自动生成对应的实体类,简化 XML 的创建、修改以及读取。

打开 VS,在 XSD 文件上点击鼠标右键,点选 Open Command Prompt

然后在命令行中输入 xsd abc.xsd /classes,随后就会在当前目录生成对应的 C# 类了,如果需要 VB 语言版本,追加 /language:vb 参数即可。(Tips: 键入 explorer . 就可以在 Windows Explorer 查看当前的目录)

左侧是 XSD 定义,右侧是自动生成的 C# 类。

我们可以编写一个简单的类,来完成实体对象和 XML 文件的读取与存储。

[csharp] namespace SquirrelFramework.Configurations {     #region using directives     using System.IO;     using System.Xml.Serialization;     #endregion using directives     public class XmlManager<TXmlModel>     {         public string XmlFilePath { get; }         public bool IsEnableFileWatcher { get; private set; }         private XmlSerializer serializer;         private FileSystemWatcher fileWatcher;         public XmlManager(string xmlFilePath, bool isEnableFileWatcher = false)         {             this.XmlFilePath = xmlFilePath;             this.serializer = new XmlSerializer(typeof(TXmlModel));             this.IsEnableFileWatcher = isEnableFileWatcher;         }         public TXmlModel GetModel()         {             using (var stream = new FileStream(this.XmlFilePath, FileMode.OpenOrCreate, FileAccess.Read))             {                 return (TXmlModel)this.serializer.Deserialize(stream);             }         }         public void SaveModel(TXmlModel model)         {             using (var stream = new FileStream(this.XmlFilePath, FileMode.OpenOrCreate, FileAccess.Write))             {                 this.serializer.Serialize(stream, model);             }         }         public void EnableFileWatcher(FileSystemEventHandler fileSystemEventHandler)         {             if (this.fileWatcher != null)             {                 this.fileWatcher.Dispose();             }             this.IsEnableFileWatcher = true;             this.fileWatcher = new FileSystemWatcher             {                 Path = Path.GetDirectoryName(this.XmlFilePath),                 IncludeSubdirectories = false,                 Filter = Path.GetFileName(this.XmlFilePath),                 //Filter = "*.config"                 EnableRaisingEvents = this.IsEnableFileWatcher             };             this.fileWatcher.Changed += fileSystemEventHandler;         }         public void DisableFileWatcher()         {             if (this.fileWatcher != null)             {                 this.fileWatcher.Dispose();             }             this.IsEnableFileWatcher = false;         }     } } [/csharp]

查看原文:http://nap7.com/me/convert-xsd-to-class/
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页