当前位置: 首页 > 编程日记 > 正文

asp.net webapi 序列化为xml 时实体属性增加![CDATA[]]防止特殊字符

有时webapi在序列化xml时,可能需要给某些带有html或特殊字符(如 < > & /)的字段加上<![CDATA[]]> 已防止影响xml正常数据,如果使用.aspx视图那可直接在前台绑定字段时直接加入<![CDATA[]]>,webapi只有后台代码,那只能在后台做了,如下。

  1 using System;
  2 using System.Collections.Generic;
  3 using System.IO;
  4 using System.Net;
  5 using System.Net.Http;
  6 using System.Net.Http.Formatting;
  7 using System.Threading.Tasks;
  8 using System.Web.Http;
  9 using System.Xml;
 10 using System.Xml.Serialization;
 11 
 12 namespace MvcApplication1.Controllers
 13 {
 14     public class TestController : ApiController
 15     {
 16         [HttpGet]
 17         [HttpPost]
 18         public HttpResponseMessage HouseTest(string city)
 19         {
 20             //手动构造数据,这里应该是调用构造数据。
 21             var info = new GetHouseCountInfo()
 22             {
 23                 CityName = "北京",
 24                 CountInfo = new List<CountInfo>()
 25                 {
 26                     new CountInfo()
 27                     {
 28                         Data = "2016-08-30",
 29                         HouseDetail = "描述信息1111等。。。"
 30                     },
 31                     new CountInfo()
 32                     {
 33                         Data = "2016-08-30",
 34                         HouseDetail = "描述信息2222等。。。"
 35                     },
 36                     new CountInfo()
 37                     {
 38                         Data = "2016-08-30",
 39                         HouseDetail = "描述信息333等。。。"
 40                     }
 41                 }
 42             };
 43             //序列化实体与赋值
 44             var model = new HouseCountRoot {GetHouseInfo = new GetHouseCountInfo()};
 45             model.GetHouseInfo.CountInfo = info.CountInfo;
 46             model.Result = "";
 47             model.Message = "";
 48             model.GetHouseInfo.CityName = info.CityName;
 49 
 50             return new HttpResponseMessage()
 51             {
 52                 Content =
 53                     new ObjectContent<HouseCountRoot>(model, new CustomNamespaceXmlFormatter() {UseXmlSerializer = true},
 54                         new System.Net.Http.Headers.MediaTypeHeaderValue("application/xml") {CharSet = "utf-8"}),
 55                 StatusCode = HttpStatusCode.OK
 56             };
 57         }
 58     }
 59 
 60     [XmlRoot("houses")]
 61     public class HouseCountRoot
 62     {
 63         [XmlElement("result")]
 64         public string Result { get; set; }
 65 
 66         [XmlElement("message")]
 67         public string Message { get; set; }
 68 
 69         [XmlElement("housecount")]
 70         public GetHouseCountInfo GetHouseInfo { get; set; }
 71     }
 72 
 73     public class GetHouseCountInfo
 74     {
 75         /// <summary>
 76         /// 城市名称
 77         /// </summary>
 78         [XmlElement("cityname")]
 79         public string CityName { get; set; }
 80 
 81         /// <summary>
 82         /// 房源数信息
 83         /// </summary>
 84         [XmlElement("countinfo")]
 85         public List<CountInfo> CountInfo { get; set; }
 86     }
 87 
 88     public class CountInfo
 89     {
 90         /// <summary>
 91         /// 日期
 92         /// </summary>
 93         [XmlElement("data")]
 94         public string Data { get; set; }
 95 
 96         /// <summary>
 97         ///<![CDATA[ ]]>数据字段
 98         /// </summary>
 99         [XmlIgnore] //方式1,这里属性设置忽略,把CDataContent设置为housedetail
100         public string HouseDetail { get; set; }
101 
102         [XmlElement("housedetail")]
103         public XmlNode[] CDataContent
104         {
105             get
106             {
107                 return new XmlNode[]
108                 {
109                     new XmlDocument().CreateCDataSection(HouseDetail)
110                 };
111             }
112             set
113             {
114                 HouseDetail =
115                     value[0].Value;
116             }
117         }
118 
119         //方式二,这里把CDataContent设置为housedetail
120         //[XmlElement("housedetail")]
121         //public XmlNode CDataContent
122         //{
123         //    get
124         //    {
125         //        // 这种方式这里代码比上面的要多运行一定次数。
126         //        XmlNode node = new XmlDocument().CreateNode(XmlNodeType.CDATA, "", "");
127         //        node.InnerText = HouseDetail;
128         //        return node;
129         //    }
130         //    set
131         //    {
132         //        HouseDetail
133         //            = value.Value;
134         //    } //省略则CDataContent不会被序列化
135         //}
136 
137         //以下属性省略。。。。
138     }
139 
140     /// <summary>
141     /// 去除xml命名空间的 序列化类
142     /// </summary>
143     public class CustomNamespaceXmlFormatter : XmlMediaTypeFormatter
144     {
145         public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content,
146             TransportContext transportContext)
147         {
148             var xns = new XmlSerializerNamespaces();
149             foreach (var attribute in type.GetCustomAttributes(true))
150             {
151                 var xmlRootAttribute = attribute as XmlRootAttribute;
152                 if (xmlRootAttribute != null)
153                 {
154                     xns.Add(string.Empty, xmlRootAttribute.Namespace);
155                 }
156             }
157 
158             if (xns.Count == 0)
159             {
160                 xns.Add(string.Empty, string.Empty);
161             }
162 
163             var task = Task.Factory.StartNew(() =>
164             {
165                 var serializer = new XmlSerializer(type);
166                 serializer.Serialize(writeStream, value, xns);
167             });
168 
169             return task;
170         }
171     }
172 }

结果如下。

 1 <?xml version="1.0"?>
 2 <houses>
 3   <result />
 4   <message />
 5   <housecount>
 6     <cityname>北京</cityname>
 7     <countinfo>
 8       <data>2016-08-30</data>
 9       <housedetail><![CDATA[描述信息1111等。。。]]></housedetail>
10     </countinfo>
11     <countinfo>
12       <data>2016-08-30</data>
13       <housedetail><![CDATA[描述信息2222等。。。]]></housedetail>
14     </countinfo>
15     <countinfo>
16       <data>2016-08-30</data>
17       <housedetail><![CDATA[描述信息333等。。。]]></housedetail>
18     </countinfo>
19   </housecount>
20 </houses>

转载于:https://www.cnblogs.com/Dream618/p/5820585.html

相关文章:

C#中读取数据库中Image数据

作者&#xff1a;未知 请与本人联系DataReader 的默认行为是在整个数据行可用时立即以行的形式加载传入数据。但是&#xff0c;对于二进制大对象 (BLOB) 则需要进行不同的处理&#xff0c;因为它们可能包含数十亿字节的数据&#xff0c;而单个行中无法包含如此多的数据。Comman…

创新工场提出中文分词和词性标注模型,性能分别刷新五大数据集| ACL 2020​

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;中文分词和词性标注是中文自然语言处理的两个基本任务。尽管以BERT为代表的预训练模型大行其道&#xff0c;但事实上&#xff0c;中文中基于全词覆盖 &#xff08;whole word masking&#xff09;的预训练模型比直接使…

使用XML在MSSQL把字串分解

今天要在mssql里处理一串Email地址。以分号分开的。以前自己写过一个split函数的。这次想使用xml来处理。mssql 2000和mssql 2005数据库对xml的支持有些不同。至少mssql 2005的功能多些。代码一&#xff1a;这个代码在MSSQL 2005测试成功, 在mssql 2000不通过。最后生成一个表变…

tomcat中server.xml文件详解

原文&#xff1a;http://www.cnblogs.com/starhu/p/5599773.html Tomcat Server的结构图如下&#xff1a;该文件描述了如何启动Tomcat Server <Server> <Listener /> <GlobaNamingResources> </GlobaNamingResources <Service> …

想提前目睹人到中年的发型?试试这款自制秃头生成器

要说最近哪部剧最红&#xff0c;我说是《隐秘的角落》没人有意见吧&#xff1f;看了这部片子&#xff0c;全国观众除了被男主张东升提醒爬山有风险之外&#xff0c;片中的另一个场景也颇让人印象深刻&#xff0c;容易让人产生共鸣&#xff0c;那就是张东升看到自己二十年后的样…

Windows Phone实用开发技巧(32):照片角度处理

在实际项目中&#xff0c;可能需要用户从相册中选择图片然后进行相应的处理。但是不知道大家有没有发现这样一种情况&#xff0c;就是手机里看是竖着的&#xff0c;但是上传到微博或者哪里的时候确实横着的。一种情况是你拿手机竖着拍照得话&#xff0c;照片就是横着的&#xf…

ubuntu 12 JDK 编译

下载openjdk源码 http://jdk7.java.net/source.html 安装Ubuntu上面的依赖包&#xff1a; 1、参考原书 环境变量配置&#xff1a; 1、去www.hzbook.com上面将深入理解java虚拟机&#xff0c;周志明写的那本书的代码download2、ALT_BOOTDIR变量最好引用 jdk1.7.0_04&#xff0c…

“编程能力差,90%是输在这点上!”谷歌AI开发专家:逆袭并没那么难!

Google 人工智能开发者专家彭靖田老师说——超90%的程序员在初学Python 人工智能时&#xff0c;都会遇到下面3个问题&#xff1a;1.想入门人工智能&#xff0c;但不知从何学起&#xff0c;也不知道该选择什么方向...2.Python语法、机器学习/深度学习框架、算法都能看懂&#xf…

文本的DES加密 MD5散列值 DSA的数字签名

作者&#xff1a;未知文本的DES加密为了对称加密的安全&#xff0c;将密码进行封装&#xff0c;先新建一个用于保存密码的类库cl&#xff1a;using System;using System.Text ;namespace cl{ /// <summary> /// Class1 的摘要说明。 /// </summary> public class C…

在SQL Server中调用.NET程序集

使用到这东西完全是个巧合和无奈之举。不小心在数据库中插入了一些HttpUtility.UrlEncodeUnicode之后的数据。数据库里的一些字段成了%uxxxx%uxxxx这样的结构。 搜索了半天T-SQL UrlDecode的函数&#xff0c;发现都不支持上面这种Unicode的。自己对T-SQL又不熟悉&#xff0c;时…

AngularJS2 + ASP.NET MVC项目

环境&#xff1a;VS2015&#xff0c; NodeJS:v 6.5, npm: v3.10, AngularJs 2 通过将ASP.NET MVC项目与Angualr 2官网上的quick start整合的过程中遇到些问题。 通过下面的若干配置最终向项目build成功。 转载于:https://www.cnblogs.com/1zhk/p/5831567.html

干货!仅有 100k 参数的高效显著性检测方法

作者 | 南开大学 程明明、依图科技 颜水成责编 | Carol封图 | CSDN 下载自视觉中国显著性目标检测模型通常需要花费大量的计算成本才能对每个像素进行精确的预测&#xff0c;因此这使得其几乎不适用于低功耗的设备。本文旨在通过提高网络计算效率来缓解计算花费与模型性能之间的…

如何将一个彩色图像转换成黑白图像

作者&#xff1a;未知彩色图像转换为黑白图像时需要计算图像中每像素有效的亮度值&#xff0c;通过匹配像素 亮度值可以轻松转换为黑白图像。 计算像素有效的亮度值可以使用下面的公式&#xff1a; Y0.3RED0.59GREEN0.11Blue 然后使用 Color.FromArgb(Y,Y,Y) 来把计算后的值…

修改Activity响应音量控制键修改的音频流

转自&#xff1a;http://rainhomepage.appspot.com/2010/05/hardware-volume-controls-audio-stream-setvolumecontrolstream 当开发多媒体应用或者游戏应用的时候&#xff0c;需要使用音量控制键来设置程序的音量大小。在Android系统中有多中音频流&#xff0c;通过Activity中…

css3选择器二

在HTML中&#xff0c;通过各种各样的属性可以给元素增加很多附加的信息&#xff0c;了解和掌握css3一些的选择器&#xff0c;是很有必要的。 :enabled 和 :disabled选择器表单元素有可用&#xff08;“:enabled”&#xff09;和不可用&#xff08;“:disabled”&#xff09;状态…

结合ashx来在DataGrid中显示从数据库中读出的图片

作者&#xff1a;木子 http://blog.csdn.net/derny/下面利用ashx文件可以方便实现从数据库中读取图片并显示在datagrid当中 //---------------------------------------BindImage.aspx ---------------------------------------- <% Page language"c#" Codebehi…

如何度过二十多岁这段又穷又迷茫的岁月?

我们在后台常常会收到读者的留言我马上毕业了&#xff0c;但是现在很迷茫&#xff0c;不知道学校里学的&#xff0c;能不能真正的适应工作...我工作两三年&#xff0c;还是不知道怎么规划自己的技术成长路线&#xff0c;不知道该学什么来提升自己的竞争力...人生需要长线的经营…

Qt 自定义信号与槽

注 对象与槽理解 //第一个参数lineEdit是激发事件对象,信号中的方法必须在对象中存在&#xff0c;并在对象类头文件signals下定义&#xff0c;//第二个参数信号&#xff0c;//第三个参数this是槽方法所属类的对象&#xff0c;且必须在对象类的头文件的slots下定义//第四个参数槽…

php解析ip列表并入库

前一段时间因为要开发一个新项目&#xff0c;需要一个ip库&#xff0c;由于公司原本无这样一个库&#xff0c;所以急需从文件中匹配ip地址然后存库。下面是我下的一段程序&#xff0c;可能效率不是很高&#xff0c;代码也没有做过多的优化&#xff0c;有些地方比较繁琐&#xf…

AI 领域新突破,腾讯发布首个AI药物研发平台「云深智药」

7月9日&#xff0c;2020世界人工智能大会云端峰会开幕。会上&#xff0c;腾讯首席运营官任宇昕公布了用AI助力药物研发领域的最新进展——由腾讯自主研发的首个AI驱动的药物发现平台“云深智药&#xff08;iDrug&#xff09;”正式对外发布。云深智药平台的推出&#xff0c;将帮…

写入和读取图片(c# asp.net sqlserver)

作者&#xff1a;木子 http://blog.csdn.net/derny/首先要创建一个表包含自段image 和 type 类型各自为image 和 vnanchar WebForm1.aspx <% Page language"c#" Codebehind"WebForm1.aspx.cs" AutoEventWireup"false" Inherits"ReadA…

【MyBatis学习01】宏观上把握MyBatis框架

今天开始学习mybatis框架&#xff0c;博客主要记录学习过程中的一些总结&#xff0c;如有错误之处&#xff0c;欢迎留言指正~先用mybatis的鸟鸟来镇个楼&#xff0c;咳咳~~ mybatis框架是一个持久层框架&#xff0c;是Apache下的顶级项目。mybatis可以让开发者的主要精力放在s…

消除图片在ie中缓存而无法更新的问题

程序中图片是动态显示的 原先把打算把图片保存在服务器端然后显示 可是由于ie的缓存问题导致图片无法实时更新显示 所以改为把图片存在session中然后再显示 需要保存的时候再保存到本地 //&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&…

Linux shell笔记

由于工作的需要&#xff0c;越来越多的接触到linux系统。最近看了《Linux与Unix Shell》这本书&#xff0c;安装书的章节整理了一些自己认为比较重要的命令&#xff0c;方便以后查阅。 No.001 文件安全与权限 1. umask 决定了新建文件的权限 2. 软链接(符号链接) ln -s source_…

ACL最佳论文提出最新NLP模型测试方法,最佳论文提名也不可小觑

译者 | 刘畅出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;近日&#xff0c;ACL 2020公布了最佳论文奖&#xff0c;另有两篇最佳论文荣誉提名奖也各自提出了解决NLP领域问题的创新方法。最佳论文&#xff1a;Beyond Accuracy: Behavioral Testing o…

LVM逻辑卷的缩减与删除,LVM逻辑卷快照,btrfs文件系统,网络管理

逻辑卷缩减缩减的时候要注意缩减的空间不要超过文件系统的空间&#xff0c;不然缩减的时候会损坏文件系统。第一步要先取消挂载&#xff08;必须&#xff09;第二部检查文件完整性&#xff08;必须&#xff09;e2fsck -f /dev/vg0/lv0第三部文件系统缩减&#xff0c;先缩减文件…

屏掉F5刷新的办法

<body οnkeydοwn"KeyDown()"> function KeyDown(){ //屏蔽退格删除键,屏蔽 F5 刷新键,Ctrl R if ((event.keyCode116)||(event.ctrlKey && event.keyCode82)) { event.keyCode0; event.returnValuefalse; } }

WAIC汇聚全球顶级科学家,畅谈人工智能的未来挑战与突破

7月9日&#xff0c;2020世界人工智能大会&#xff08;WAIC&#xff09;正式拉开帷幕。当天下午&#xff0c;2020世界人工智能大会科学前沿全体会议召开&#xff0c;作为今年WAIC唯一一场聚焦前沿科技的大会&#xff0c;邀请了世界范围内最顶级的AI专家探讨技术趋势。其中&#…

ant学习笔记之(ant执行命令的详细参数和Ant自带的系统属性)

2019独角兽企业重金招聘Python工程师标准>>> 一&#xff1a;ant执行命令的详细参数 -buildfile<file>,-file<file>,-f<file> :要指定执行构件的的位置和名称。 -find<file>,-s<file>: 查找构件文件&#xff0c;并执行找到的构件文件。…

mipi和dsi

转自&#xff1a; http://blog.csdn.net/longxiaowu/article/details/24410021 一、MIPI MIPI&#xff08;移动行业处理器接口&#xff09;是Mobile Industry Processor Interface的缩写。MIPI&#xff08;移动行业处理器接口&#xff09;是MIPI联盟发起的为移动应用处理器制定…