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

 using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Formatting;
using System.Threading.Tasks;
using System.Web.Http;
using System.Xml;
using System.Xml.Serialization; namespace MvcApplication1.Controllers
{
public class TestController : ApiController
{
[HttpGet]
[HttpPost]
public HttpResponseMessage HouseTest(string city)
{
//手动构造数据,这里应该是调用构造数据。
var info = new GetHouseCountInfo()
{
CityName = "北京",
CountInfo = new List<CountInfo>()
{
new CountInfo()
{
Data = "2016-08-30",
HouseDetail = "描述信息1111等。。。"
},
new CountInfo()
{
Data = "2016-08-30",
HouseDetail = "描述信息2222等。。。"
},
new CountInfo()
{
Data = "2016-08-30",
HouseDetail = "描述信息333等。。。"
}
}
};
//序列化实体与赋值
var model = new HouseCountRoot {GetHouseInfo = new GetHouseCountInfo()};
model.GetHouseInfo.CountInfo = info.CountInfo;
model.Result = "";
model.Message = "";
model.GetHouseInfo.CityName = info.CityName; return new HttpResponseMessage()
{
Content =
new ObjectContent<HouseCountRoot>(model, new CustomNamespaceXmlFormatter() {UseXmlSerializer = true},
new System.Net.Http.Headers.MediaTypeHeaderValue("application/xml") {CharSet = "utf-8"}),
StatusCode = HttpStatusCode.OK
};
}
} [XmlRoot("houses")]
public class HouseCountRoot
{
[XmlElement("result")]
public string Result { get; set; } [XmlElement("message")]
public string Message { get; set; } [XmlElement("housecount")]
public GetHouseCountInfo GetHouseInfo { get; set; }
} public class GetHouseCountInfo
{
/// <summary>
/// 城市名称
/// </summary>
[XmlElement("cityname")]
public string CityName { get; set; } /// <summary>
/// 房源数信息
/// </summary>
[XmlElement("countinfo")]
public List<CountInfo> CountInfo { get; set; }
} public class CountInfo
{
/// <summary>
/// 日期
/// </summary>
[XmlElement("data")]
public string Data { get; set; } /// <summary>
/// 加<![CDATA[ ]]>数据字段
/// </summary>
[XmlIgnore] //方式1,这里属性设置忽略,把CDataContent设置为housedetail
public string HouseDetail { get; set; } [XmlElement("housedetail")]
public XmlNode[] CDataContent
{
get
{
return new XmlNode[]
{
new XmlDocument().CreateCDataSection(HouseDetail)
};
}
set
{
HouseDetail =
value[].Value;
}
} //方式二,这里把CDataContent设置为housedetail
//[XmlElement("housedetail")]
//public XmlNode CDataContent
//{
// get
// {
// // 这种方式这里代码比上面的要多运行一定次数。
// XmlNode node = new XmlDocument().CreateNode(XmlNodeType.CDATA, "", "");
// node.InnerText = HouseDetail;
// return node;
// }
// set
// {
// HouseDetail
// = value.Value;
// } //省略则CDataContent不会被序列化
//} //以下属性省略。。。。
} /// <summary>
/// 去除xml命名空间的 序列化类
/// </summary>
public class CustomNamespaceXmlFormatter : XmlMediaTypeFormatter
{
public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content,
TransportContext transportContext)
{
var xns = new XmlSerializerNamespaces();
foreach (var attribute in type.GetCustomAttributes(true))
{
var xmlRootAttribute = attribute as XmlRootAttribute;
if (xmlRootAttribute != null)
{
xns.Add(string.Empty, xmlRootAttribute.Namespace);
}
} if (xns.Count == )
{
xns.Add(string.Empty, string.Empty);
} var task = Task.Factory.StartNew(() =>
{
var serializer = new XmlSerializer(type);
serializer.Serialize(writeStream, value, xns);
}); return task;
}
}
}

结果如下。

 <?xml version="1.0"?>
<houses>
<result />
<message />
<housecount>
<cityname>北京</cityname>
<countinfo>
<data>2016-08-30</data>
<housedetail><![CDATA[描述信息1111等。。。]]></housedetail>
</countinfo>
<countinfo>
<data>2016-08-30</data>
<housedetail><![CDATA[描述信息2222等。。。]]></housedetail>
</countinfo>
<countinfo>
<data>2016-08-30</data>
<housedetail><![CDATA[描述信息333等。。。]]></housedetail>
</countinfo>
</housecount>
</houses>

asp.net webapi 序列化为xml 时实体属性增加<![CDATA[]]>防止特殊字符的更多相关文章

  1. @JsonInclude(Include.NON_NULL) resttemplate 传递实体参数时 序列化为json时 空字符串不参与序列化

    @JsonInclude(Include.NON_NULL) resttemplate 传递实体参数时 序列化为json时 空字符串不参与序列化 https://www.cnblogs.com/sup ...

  2. 匿名对象序列化为XML

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...

  3. java 使用xom对象数据序列化为xml、反序列化、Preferences相关操作小案例

    package org.rui.io.xml; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import ...

  4. 序列化为XML

    java类序列化成xml 方法[转] 今天看了下JAVA序列化.还是一知半解.怎么也没有弄明白,怎么序列化成XML文件.处入半解状态.在网上找了很多,大部分是理论上的.没有实际的例子.功夫不负有心人, ...

  5. C#实体类序列化为XML

    这两天,应要求做一个C/S的小程序,考虑到程序简洁小巧,存数据的方式不使用数据库,而是直接存入XML文档中保存.为了把复杂实体类里面的属性存入XML,我们可以使用C#有的反射机制,做一个简单的通用工具 ...

  6. 【C#】使用C#将类序列化为XML

    直接上代码: public static class XmlSerializer { public static void SaveToXml(string filePath, object sour ...

  7. 将long数字序列化为json时,转换为字符串

    由于javascript中所有数字都是64位的浮点数,所以整数只能精确的表示53bit长的数字. 在从server得到的json数据中,有ID是长整数类型,在客户端根据此ID生成的link也是不准确的 ...

  8. 如何由XSD自动生成XML和实体类

    项目中有时候要用XML作为数据源,因此需要定义XML文件和相应的类,最佳方法是首先定义XSD,然后自动生成实体类,最后生成XML和填充数据:读取XML数据源的时候,首先用XSD验证XML数据格式,然后 ...

  9. .NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)

    序列化和反序列化是指什么? 序列化(seriallization): 将对象转化为便于传输的数据格式, 常见的序列化格式:二进制格式,字节数组,json字符串,xml字符串.反序列化(deserial ...

随机推荐

  1. AWS系列之二 使用EC2

    在本文中我们有三个任务. 第一:使用Amazon management console创建一个EC2实例. 第二:使用本地的命令行工具远程登陆到该EC2实例. 第三:在该EC2实例上创建一个web服务 ...

  2. [HIMCM暑期班]第1课:概述

    作为这个系列的开始,我会把每一节课上过的内容,与同学们互动后发现他们的闪光点记录下来,以后其他要准备该比赛的人借鉴和参考. 第一节课是概述,主要讲什么是数学建模,还有建模可以帮助我们做什么.举了三个例 ...

  3. js 把url参数转对象

    //注意url中要含? function getParameterByName(name, url) {            if (!url) {                url = win ...

  4. tomcat4 请求的处理——初步分析

    以tomcat4为例, 每当HttpConnector的ServerSocket得到客户端的连接时,会创建一个Socket. 接下来就处理这个Socket发来的数据. 怎么处理呢? 考虑到客户端同时发 ...

  5. Atitit 常用比较复杂的图像滤镜 attilax大总结

    Atitit 常用比较复杂的图像滤镜 attilax大总结 像素画滤镜 水彩油画滤镜 素描滤镜 梦幻镜 特点是中央集焦,周围景物朦化微带光晕,使人产生如入梦境的感觉.常用于拍摄婚纱.明星照,也用于其它 ...

  6. WPF中关于自定义控件的滚动条鼠标停留在内容上鼠标滚轮滚动无效的问题

    问题起因:在一个用户控件里放置了1个TreeView垂直顺序放置. 当用户控件中的内容超过面板大小时,滚动条会自动出现 ,但是只有当鼠标指示在右边滚动条的那一条位置时,才支持鼠标滚轴滚动. 点在控件内 ...

  7. CSS3 transform 属性详解(skew, rotate, translate, scale)

    写这篇文章是因为在一个前端QQ群里,网友 "小豆豆" (应他要求要出现他的网名......) ,问skew的角度怎么算,因为他看了很多文章还是不能理解skew的原理.于是,我觉得有 ...

  8. Render OpenCascade Geometry Curves in OpenSceneGraph

    在OpenSceneGraph中绘制OpenCascade的曲线 Render OpenCascade Geometry Curves in OpenSceneGraph eryar@163.com ...

  9. java session 详解

    原网址:http://blog.sina.com.cn/s/blog_670b6d880101deff.html 一.术语session 在我的经验里,session这个词被滥用的程度大概仅次于tra ...

  10. poj1949Chores(建图或者dp)

    /* 题意:n个任务,有某些任务要在一些任务之前完成才能开始做! 第k个任务的约束只能是1...k-1个任务!问最终需要最少的时间完成全部的 任务! 思路:第i个任务要在第j个任务之前做,就在i,j之 ...