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= ...
随机推荐
- How Many Tables HDOJ
How Many Tables Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- mac与win7(台式电脑)共享文件
人生处处又都坑,自己走过了,所以记下来. mac共享文件,win7访问: 1.系统偏好设置-共享-都选中就行.一般都会这样说. 2.系统偏好设置-用户与群组-解锁-客人用户-允许客人用户连接到共享文件 ...
- iOS 5 故事板进阶(2)
让我们回到游戏排行窗口Ranking.创建一个 UITableViewController子类,命名为 RankingViewController. 编辑 RankingViewController. ...
- 章文嵩博士和他背后的负载均衡(LOAD BANLANCER)帝国
案首语: 阿里集团技术大牛,@正明,淘宝基础核心软件研发负责人.LVS创始人.阿里云首席科学家章文嵩博士从阿里离职,去追求技术人生另一段历程,让阿里像我一样的很多热爱技术的工程师都有一丝牵动和感触. ...
- Android adb shell data目录,Permission denied
Android adb shell进入data目录,Permission denied 权限被拒绝 在shell里面输入su root,去申请root权限,注意:有小部分手机是需要点击授权,再次执行c ...
- Spring Boot 应用系列 5 -- Spring Boot 2 整合logback
上一篇我们梳理了Spring Boot 2 整合log4j2的配置过程,其中讲到了Spring Boot 2原装适配logback,并且在非异步环境下logback和log4j2的性能差别不大,所以对 ...
- 使用SignalR 2进行服务器广播
概述 在本教程中,您将创建一个股票代码应用程序,该应用程序代表您希望定期“推送”或广播从服务器到所有连接客户端的通知的实时应用程序.在本教程的第一部分中,您将从头开始创建该应用程序的简化版本.在本教程 ...
- C#基础复习(2) 之 装箱拆箱
参考资料 [1] @只增笑耳Jason的回答 https://www.zhihu.com/question/57208269 [2] <C# 捷径教程> 疑难解答 装箱和拆箱是什么? 何时 ...
- List泛型集合对象排序
本文的重点主要是解决:List<T>对象集合的排序功能. 一.List<T>.Sort 方法 () MSDN对这个无参Sort()方法的介绍:使用默认比较器对整个List< ...
- .net core Memcached使用
首先,你要在你电脑上安装配置好Memcached环境哦 Startup类的ConfigureServices中加入 //memcachedcore1 services.AddEnyimMemcache ...