如何将 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/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值