dynamic解析Http xml格式响应数据
继续上一篇 构建RESTful风格的WCF服务 ,咱已经把服务端的数据和服务准备好了,客户端调用 wcf rest接口后如何解析xml?下面使用dynamic关键字解析来至于WCF REST XML响应数据。
首先创建一个WCF客户端类,添加GET、POST处理方法:
public class WcfRestClient
{
public Uri BaseUri { get; private set; } //Url:http://localhost:1008/ public WcfRestClient(Uri baseUri)
{
BaseUri = baseUri;
} public WcfRestClient(string baseUrl)
: this(new Uri(baseUrl))
{ } private dynamic GetResponseObject(HttpWebRequest request)
{
try
{
var response = request.GetResponse() as HttpWebResponse;
using (var stream = response.GetResponseStream())
{
if (!stream.CanRead)
return null;
StreamReader reader = new StreamReader(stream);
string source = reader.ReadToEnd();
response.Close();
return XmlStringToDynamic(source);
}
}
catch (WebException ex)
{
using (var stream = ex.Response.GetResponseStream())
{
if (!stream.CanRead)
return null;
StreamReader reader = new StreamReader(stream);
string source = reader.ReadToEnd();
return XmlStringToDynamic(source);
}
}
}
//GET请求
public dynamic WebGet(string path)
{
HttpWebRequest request=(HttpWebRequest)HttpWebRequest.Create(BaseUri.ToString()+path);
return GetResponseObject(request);
}
//POST请求
public dynamic WebPost(string path, string data)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(BaseUri.ToString() + path);
request.Method = "POST";
if (!String.IsNullOrEmpty(data))
{
request.ContentType = "text/xml"; //xml格式传输数据
byte[] buffer = Encoding.UTF8.GetBytes(data);
request.ContentLength = buffer.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(buffer, , buffer.Length);
stream.Flush();
}
}
return GetResponseObject(request);
}
//
public static dynamic XmlStringToDynamic(string xml)
{
if (String.IsNullOrEmpty(xml))
return null;
XElement element = XElement.Parse(xml);
dynamic dynamicResult = new DynamicXMLNode(element);
return dynamicResult;
}
}
2、dynamic处理xml节点DynamicXMLNode类,需要继承DynamicObject(System.Dynamic),对返回的xml对象进行动态解析。
public class DynamicXMLNode:DynamicObject
{
public DynamicXMLNode() { } XElement node; public XElement Element
{
get
{
return node;
}
} public DynamicXMLNode(XElement node)
{
this.node = node;
} public DynamicXMLNode(string name)
{
node = new XElement(name);
} public override bool TryGetMember(GetMemberBinder binder, out object result)
{
if (binder.Name == "Value")
{
result = node.Value;
return true;
}
if (binder.Name == "ElementCount")
{
if (node.HasElements)
result = node.Elements().Count();
else
result = ;
return true;
}
XElement getNode;
try
{
getNode = node.Element(binder.Name);
}
catch
{
result = null;
return true;
}
if (getNode != null)
{
result = new DynamicXMLNode(getNode);
return true;
}
else
{
result = null;
return false;
}
} }
3、最后咱们来测试一下发起GET和POST请求,首先创建一个aspx页面,在.cs文件:
/// <summary>
/// 处理GET请求
/// </summary>
private void GetData()
{
WcfRestClient client = new WcfRestClient("http://localhost:1008/");
dynamic result = client.WebGet(String.Format("user/search/{0}", ""));
this.txtGetUrl.Text = client.BaseUri + String.Format("user/search/{0}", "");
this.txtId.Text = result.Id.Value;
this.txtCode.Text = result.Code.Value;
this.txtName.Text = result.Name.Value;
this.txtDesc.Text = result.Description.Value;
} /// <summary>
/// 测试POST请求
/// </summary>
private void PostData()
{
string strBuiler = String.Format("<UserInfo><Code>{0}</Code><Description>{1}</Description><Id>{2}</Id><Name>{3}</Name></UserInfo>","","post请求",,"好基友");
WcfRestClient client = new WcfRestClient("http://localhost:1008/");
dynamic result = client.WebPost("user/register", strBuiler);
this.txtPOSTUrl.Text = client.BaseUri + "user/register";
this.txtId1.Text = result.Id.Value;
this.txtCode1.Text = result.Code.Value;
this.txtName1.Text = result.Name.Value;
this.txtDesc1.Text = result.Description.Value;
}
测试结果:

噢了。。。
dynamic解析Http xml格式响应数据的更多相关文章
- scrapy 解析xml格式的数据
XMLFeedSpider 主要用于 解析 xml格式的数据 创建一个scrapy 项目文件 scrapy startproject xxx 创建一个spider scrapy genspider - ...
- 如何在JSP页面里面显示xml格式的数据
正常情况下,在jsp页面里的标签里写xml格式的数据,在浏览器里面的页面里显示出来的是乱码. 为什么会显示乱码呢?原来xml标签在jsp里会被解析为浏览器对象,因为xml最开始被设计出来是 为了写网页 ...
- xml格式的数据转化成数组
将得到的xml格式的数据转化成数组 <?php //构造xml $url = "http://api.map.baidu.com/telematics/v3/weather?locat ...
- C#操作数据表中XML格式的数据
以前还真没有见过数据表中存储XML格式的数据,刚开始听说的时候,还以为是数据表中有XML的字段类型, 再了解,其实也就是字符串类型的,只不过字符串的格式是XML格式的.确实孤陋寡闻!汗... (可添加 ...
- SpringMVC处理XML格式的数据
1.搭建SpringMVC+spring环境 2.web.xml,Springmvc-config.xml.springMVC提供了处理xml格式请求响应的HttpMessageConverter,s ...
- Asp.net Core WebApi 支持json/xml格式的数据返回
Asp.net core 在做webapi项目的时候,默认是只返回json格式的数据的,如果想要开启xml数据返回,需要在startup里配置如下: public void ConfigureServ ...
- android开发 服务器端访问MySQL数据库,并把数据库中的某张表解析成xml格式输出到浏览器
我们此时只要写一个Servlet就可以了: public class UpdateMenuServlet extends HttpServlet { /** * */ private static f ...
- 关于java后台如何接收xml格式的数据
业务场景:用户发送下单请求,格式为xml格式,服务器接收数据完成下单,并返回结果给客户. 请求格式: <request> <head> <sign></sig ...
- JAVA 读取xml格式的数据
<?xml version="1.0" encoding="UTF-8"?> <column-enums> <type name= ...
随机推荐
- ViewGroup onInterceptTouchEvent,ViewGroup onTouchEvent,View onTouchEvent执行顺序说明
今天抽出了一些时间实践了viewgroup和view的触摸事件顺序,之前也试过,总是忘记,今天记下笔记说明一下 首先 onInterceptTouchEvent只会出现在viewgroup中,view ...
- [H5-Compress-Image]利用canvas实现 javascript 图片压缩处理_基于requirejs模块化的代码实现
// 还存在有问题的代码,问题在于processFile()中// 问题:在ipone 5c 下,某些图片压缩处理后,上传到服务器生成的文件size为0,即是空白 ;define(['mod/tool ...
- [jquery-delegate] iphone_4s _iphone _5c_中不兼容jQuery delegate 事件(does not wok)
1. jQuery .on() and .delegate() doesn't work on iPad http://stackoverflow.com/questions/10165141/jqu ...
- Redis Sentinel基本介绍(翻译以及总结)
目录 Redis Sentinel介绍 分布式的Redis Sentinel 快速开始 获取Sentinel 启动Sentinel 部署Sentinel的基本要求 配置Sentinel 其他的Sent ...
- linux系统编程之进程(六):父进程查询子进程的退出,wait,waitpid
本节目标: 僵进程 SIGCHLD wait waitpid 一,僵尸进程 当一个子进程先于父进程结束运行时,它与其父进程之间的关联还会保持到父进程也正常地结束运行,或者父进程调用了wait才告终止. ...
- IIS7 上传时出现'ASP 0104 : 80004005'错误
这个错误本身说的是上传的文件的大小超过IIS所设置的默认值,一般为200KB,压缩文件是个下下之选,我还真这么干过.后来了解到通过更改IIS对上传文件的默认大小设置,来实现上传. 下面说一下具体步骤: ...
- VS中ReportView的坑爹问题
ReportViewer不是.netframework提供的,而是visual studio提供的组件,它依赖如下组件: Microsoft.ReportViewer.Winforms.dll Mic ...
- 如何把OpenWrt安装到PC?
前言 什么是openwrt? 它是一个适用于路由器的Linux发行版.和其他Linux发行版一样,它也内置了包管理工具,你可以从一个软件仓库里直接安装软件.OpenWrt可以用在所有需要嵌入式Linu ...
- Day 12 装饰器,开发封闭.
一.什么是装饰器 装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象. 装饰器的应用场景:比如插入日志,性能测试,事务 ...
- webpack初学者(1)
最近在学习webpack的总结,不完善的希望各位提出宝贵的建议.本篇是以webpack3.0版本为基础的学习总结. 一.webpack的概念及作用 wepack是一个模块打包兼优化工具.往往一个项目中 ...