.NET 4.5对应的VS版本(不要问我哪个版本)中新增了一个功能,严重实用,可以根据XML文档生成新类型。这个功能在VS的【编辑】>【选择性粘贴】菜单中。怎么玩?不急,咱们实际操作一下。

以网易新闻中心的RSS源为例,URI必须指向XML文档,我选用了“文化资讯”频道的内容来测试,URI如下:

http://book.163.com/special/0092451H/rss_whzx.xml

在浏览器地址栏中输入以上URI,然后打开该RSS源,然后查看源。按全选选中整个XML文档。

然后回到VS项目(注意要先建一个项目),可以新建一个代码文件,然后把鼠标光标定位到要插入新class的地方,然后依次执行菜单【编辑】>【选择性粘贴】>【将XML粘贴为类】。

然后,我们会看到神奇一幕发生。生成的代码如下:

    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class rss
{ ……/// <remarks/>
public rssChannel channel
{
get
{
return this.channelField;
}
set
{
this.channelField = value;
}
} /// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public decimal version
{
get
{
return this.versionField;
}
set
{
this.versionField = value;
}
}
} /// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class rssChannel
{ ……/// <remarks/>
public string title
{
get
{
return this.titleField;
}
set
{
this.titleField = value;
}
} /// <remarks/>
public string link
{
get
{
return this.linkField;
}
set
{
this.linkField = value;
}
} ……
} /// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("item")]
public rssChannelItem[] item
{
get
{
return this.itemField;
}
set
{
this.itemField = value;
}
}
} /// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class rssChannelItem
{ ……/// <remarks/>
public string title
{
get
{
return this.titleField;
}
set
{
this.titleField = value;
}
} ……/// <remarks/>
public string pubDate
{
get
{
return this.pubDateField;
}
set
{
this.pubDateField = value;
}
} /// <remarks/>
public rssChannelItemGuid guid
{
get
{
return this.guidField;
}
set
{
this.guidField = value;
}
}
} /// <remarks/>
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class rssChannelItemGuid
{ private bool isPermaLinkField; private string valueField; /// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public bool isPermaLink
{
get
{
return this.isPermaLinkField;
}
set
{
this.isPermaLinkField = value;
}
} /// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public string Value
{
get
{
return this.valueField;
}
set
{
this.valueField = value;
}
}
}

OK,代码都生成了,后面大家知道怎么做了。

这里我举个例子,通过代码在线获得RSS源的XML文档,然后通过XML反序列化来得到一个刚才生成的rss类的实例,然后就像访问其他普通类型一样使用。

        static void Main(string[] args)
{
// 设置控制台窗口的缓冲区大小
Console.SetBufferSize(Console.LargestWindowWidth, );
// 获取XML的URI
string uri = "http://book.163.com/special/0092451H/rss_whzx.xml";
WebClient wc = new WebClient();
// 获取RSS内容
byte[] xmlData = wc.DownloadData(uri);
rss wy_rss = null;
using (MemoryStream ms=new MemoryStream(xmlData))
{
// 反序列化
XmlSerializer xs = new XmlSerializer(typeof(rss));
wy_rss = (rss)xs.Deserialize(ms);
}
// 如果反序列化成功,则输出相关内容
if (wy_rss != null)
{
Console.WriteLine("版本:{0}", wy_rss.version);
rssChannel channel = wy_rss.channel;
Console.WriteLine("频道名字:{0}", channel.title);
Console.WriteLine("频道描述:\n{0}\n", channel.description);
Console.WriteLine("========= 资源列表 =========");
foreach (rssChannelItem item in channel.item)
{
Console.WriteLine("标题:{0}", item.title);
Console.WriteLine("描述:{0}", item.description);
Console.WriteLine("链接:{0}", item.link);
Console.WriteLine("发布日期:{0}", item.pubDate);
Console.WriteLine("---------------------------------");
}
}
Console.Read();
}

最后,得到的结果如下图所示。

如何,这个功能实用吧?

【VS技巧】根据XML自动生成类型的更多相关文章

  1. Eclipse用法和技巧七:自动生成get和set方法2

    上一篇文章中我们介绍了自动批量生成get和set函数的方法.这个方法一般在声明完类的数据域之后使用,比较方便快捷.这里再补充几个自动生成get和set函数的方法. 步骤一:在声明的数据域中按Ctrl+ ...

  2. Eclipse用法和技巧六:自动生成get和set方法1

    java的类中,除了常量声明为静态且公有的,一般的对象数据作用域,都是声明为私有的.这样做能保护对象的属性不会被随意改变,调试的时候也会方便很多:在类的公有方法中大一个调用栈就能看到哪里改了属性值.声 ...

  3. Eclipse用法和技巧三:自动生成Main方法2

    上一篇文章里面介绍了新建文件时候自动添加main方法,这里接着介绍自动联想main方法.       步骤一:输入"main” 步骤二:保持光标在上图位置,按ALT + /,再回车 上一篇文 ...

  4. Eclipse用法和技巧二:自动生成Main方法1

    刚开始编写java小程序,基本都要用到main方法.后期开发大一点的程序,也可以用main方法进行单元测试.总是编写main方法,感觉太无聊了,幸好Eclipse可以帮我们自动生成main方法.见图: ...

  5. 利用Vistual Studio自带的xsd.exe工具,根据XML自动生成XSD

    利用Vistual Studio自带的xsd.exe工具,根据XML自动生成XSD 1, 命令提示符-->找到vs自带的xsd.exe工具所在的文件夹 例如: C:\Program Files ...

  6. 配置generatorConfig.xml自动生成的代码的sql书写问题

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguratio ...

  7. [转]使用ant让Android自动打包的build.xml,自动生成签名的apk文件(支持android4.0以上的版本)

    在android4.0以后的sdk里那个脚本就失效了,主要是因为 apkbuilder这个程序不见了: 人家sdk升级,我们的脚本也要跟上趟,修改一下喽. 上网一查,大家的文章还停留在我去年的脚本程度 ...

  8. Eclipse用法和技巧十三:自动生成的TODO注释1

    使用eclipse的快捷键自动生成的代码,经常有这样的注释. 一眼看上去这个注释和一般的注释并无什么差别,不过TODO这个字符串的颜色不一样,应该有些内容.TODO是eclipse中提供的一种任务标签 ...

  9. [Silverlight][linq to sql]不能找到linq to sql自动生成类型

    最近在做Silverlight项目,结合使用了WCF RIA service,通过linq to sql自动生成model类型,使用起来非常方便.具体可见linq to sql之silverlight ...

随机推荐

  1. Java反射机制调用private类型的构造方法

    单例类: package singleton; public class SingletonTest { // 私有构造方法 private SingletonTest(){ System.out.p ...

  2. Drupal 7 安装时的数据库问题

    在安装D7时,需要用PhpMyAdmin创建数据库,不建议使用ROOT帐号而需要建立一个新的帐号.一般,建立一个新的账号,如foo,并同时建一个同名的数据库,选择localhost(如果是本地).但是 ...

  3. Yaf零基础学习总结4-Yaf的配置文件

    在上一节的hello yaf当中我们已经接触过了yaf的配置文件了, Yaf和用户共用一个配置空间, 也就是在Yaf_Application初始化时刻给出的配置文件中的配置. 作为区别, Yaf的配置 ...

  4. Texture2D.GetPixelBilinear(float u, float v)的使用,官方例子注释

    using UnityEngine; using System.Collections; public class TEST : MonoBehaviour { public Texture2D so ...

  5. python 库安装

    用到再更新. #Windows 一 exe 安装包 http://www.lfd.uci.edu/~gohlke/pythonlibs/#scikit-learn 二 setup.py cmd 进入目 ...

  6. JAVA使用POI操作excel

    文中处理的excel是2003年以前的版本,使用HSSFworkbook,如果处理2007版本以后的excel,用XSSFworkbook,对于二者的兼容性问题,可参考 http://blog.csd ...

  7. java反射机制初探

    最近和一位师兄交流了一下Java,真可谓是大有收获,让我好好的学习了一下javad的反射机制,同终于明白了spring等框架的一个基本实现的思想,那么今天就和大家分享一下java的反射机制. 反射,r ...

  8. Mac中体验ASP.NET 5 beta2的K gen代码生成

    ASP.NET 5 beta2中增加了一个新特性(详见ASP.NET 5 Beta2 发布),可以通过K命令生成MVC的代码,比如:k gen controller -name HomeControl ...

  9. Java设计模式6:策略模式

    策略模式 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 策略模式的结构 策略模式是对算法的包 ...

  10. DeviceOne 竟然做出来如此复杂的App

    分享来自DeviceOne论坛 此文章分享自DeviceOne的论坛,论坛上的用户分享,下面有二维码扫描,可以进行安装和试用.支持android和ios两个 操作系统. 这个还没做完,目前已经完成了初 ...