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= ...
随机推荐
- IT人员如何有效规划自己时间
中午和任职 DBA 的朋友聊天,他说:"老板老是要我把工作时间填长一点,让整个部门的工作时间比较好看,所以本来做 1 个小时的事要写 3 个小时."但我回答说若这件事情 ...
- Create a site by Google Site - All Free
Follow this link : https://www.google.com/sites/help/intl/en/overview.html
- L-BFGS
L-BFGS算法比较适合在大规模的数值计算中,具备牛顿法收敛速度快的特点,但不需要牛顿法那样存储Hesse矩阵,因此节省了大量的空间以及计算资源.本文主要通过对于无约束最优化问题的一些常用算法总结,一 ...
- golang array, slice, string笔记
本来想写一篇关于golang io的笔记,但是在学习io之前必须了解array, slice, string概念,因此将在下篇写golang io. array: 数组的长度是该数组类型的一部分, ...
- jvm lock低性能分析
日志平台client面临着输出日志的问题.为了避免干扰业务系统,我们采用异步输出的方式.这实际上相当于一个多生产者-单消费者的多线程模型.传统的方式是使用同步加锁的方式,但是这种方式不够高效.之前 钟 ...
- 自己从0开始学习Unity的笔记 I (C#字符串转换为数字)
我基本上从0开始学习编程,运算符基本上跳过,因为知道了 “=”这个符号相当于赋值,然后“==”才是等于,其他和普通运算符号差不都,也就跳过了. 最基础的赋值那种,我看了下代码,似乎没什么难度,估计新手 ...
- Android UI/UX 工具
Zeplin 用于界面图片自动导出. 图标 : https://material.io/icons/
- OpenStack 虚机网卡的创建过程
原文链接:https://www.cnblogs.com/potato-chip/p/9127083.html OpenStack虚机网卡的创建过程 OpenStack最基本和常用的操作就是启动虚机. ...
- Codeforces Round #456 (Div. 2) B. New Year's Eve
B. New Year's Eve time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- webpack快速入门——webpack3.X 快速上手一个Demo
1.进入根目录,建两个文件夹,分别为src和dist 1).src文件夹:用来存放我们编写的javascript代码,可以简单的理解为用JavaScript编写的模块. 2).dist文件夹:用来存放 ...