C#对XML、JSON等格式的解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析DNS,个人版 1个月
云解析 DNS,旗舰版 1个月
简介:

C#对XML、JSON等格式的解析

一、C#对XML格式数据的解析

1、用XMLDocument来解析

1
2
3
4
5
6
7
8
9
10
11
12
XmlDocument xmlDocument =  new  XmlDocument();
xmlDocument.Load( "test.xml" );
                                            
//创建新节点 
XmlElement nn = xmlDocument.CreateElement( "image" );
nn.SetAttribute( "imageUrl" "6.jpg" );
                                            
XmlNode node = xmlDocument.SelectSingleNode( "content/section/page/gall/folder" ); //定位到folder节点
node.AppendChild(nn); //附加新节点
                                            
//保存
xmlDocument.Save( "test.xml" );

2、用Linq to XML来解析

可以通过遍历,来获得你想要的节点的内容或属性

1
2
3
4
5
6
XElement root = XElement.Load( "test.xml" );
foreach  (XAttribute att  in  root.Attributes())
{
     root.Add( new  XElement(att.Name, ( string )att));
}
Console.WriteLine(root);

3、附一个详细点的例子

比如要解析如下的xml文件,将其转化为Ilist对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<? xml  version = "1.0"  encoding = "utf-8" ?>
< Car >
   < carcost >
     < ID >20130821133126</ ID >
     < uptime >60</ uptime >
     < downtime >30</ downtime >
     < price >0.4</ price >
   </ carcost >
   < carcost >
     < ID >20130821014316</ ID >
     < uptime >120</ uptime >
     < downtime >60</ downtime >
     < price >0.3</ price >
   </ carcost >
   < carcost >
     < ID >20130822043127</ ID >
     < uptime >30</ uptime >
     < downtime >0</ downtime >
     < price >0.5</ price >
   </ carcost >
   < carcost >
     < ID >20130822043341</ ID >
     < uptime >120以上!</ uptime >
     < downtime >120</ downtime >
     < price >0.2</ price >
   </ carcost >
</ Car >

在控制台应用程序中输入如下代码即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class  Program
{
     static  void  Main( string [] args)
     {
         IList<CarCost> resultList =  new  List<CarCost>();
                               
         XmlDocument xmlDocument =  new  XmlDocument();
         xmlDocument.Load( "test.xml" );
                               
         XmlNodeList xmlNodeList = xmlDocument.SelectSingleNode( "Car" ).ChildNodes;
         foreach  (XmlNode list  in  xmlNodeList)
         {
             CarCost carcost =  new  CarCost
             (
                 list.SelectSingleNode( "ID" ).InnerText,
                 list.SelectSingleNode( "uptime" ).InnerText,
                 list.SelectSingleNode( "downtime" ).InnerText,
                 float .Parse(list.SelectSingleNode( "price" ).InnerText)
             );
             resultList.Add(carcost);
         }
                               
         IEnumerator enumerator = resultList.GetEnumerator();
         while  (enumerator.MoveNext())
         {
             CarCost carCost = enumerator.Current  as  CarCost;
             Console.WriteLine(carCost.ID +  " "  + carCost.UpTime +  " "  + carCost.DownTime +  " "  + carCost.Price);
         }
     }
}
                               
public  class  CarCost
{
     public  CarCost( string  id,  string  uptime,  string  downtime,  float  price)
     {
         this .ID = id;
         this .UpTime = uptime;
         this .DownTime = downtime;
         this .Price = price;
     }
     public  string  ID {  get set ; }
     public  string  UpTime {  get set ; }
     public  string  DownTime {  get set ; }
     public  float  Price {  get set ; }
}

二、C#对JSON格式数据的解析

引用Newtonsoft.Json.dll文件,来解析。

比如:有个要解析的JSON字符串

[{"TaskRoleSpaces":"","TaskRoles":"","ProxyUserID":"5d9ad5dc1c5e494db1d1b4d8d79b60a7","UserID":"5d9ad5dc1c5e494db1d1b4d8d79b60a7","UserName":"姓名","UserSystemName":"2234","OperationName":"送合同负责人","OperationValue":"同意","OperationValueText":"","SignDate":"2013-06-19 10:31:26","Comment":"同意","FormDataHashCode":"","SignatureDivID":""},{"TaskRoleSpaces":"","TaskRoles":"","ProxyUserID":"2c96c3943826ea93013826eafe6d0089","UserID":"2c96c3943826ea93013826eafe6d0089","UserName":"姓名2","UserSystemName":"1234","OperationName":"送合同负责人","OperationValue":"同意","OperationValueText":"","SignDate":"2013-06-20 09:37:11","Comment":"同意","FormDataHashCode":"","SignatureDivID":""}]

首先定义个实体类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public  class  JobInfo
{
     public  string  TaskRoleSpaces {  get set ; }
     public  string  TaskRoles {  get set ; }
     public  string  ProxyUserID {  get set ; }
     public  string  UserID {  get set ; }
     public  string  UserName {  get set ; }
     public  string  UserSystemName {  get set ; }
     public  string  OperationName {  get set ; }
     public  string  OperationValue {  get set ; }
     public  string  OperationValueText {  get set ; }
     public  DateTime SignDate {  get set ; }
     public  string  Comment {  get set ; }
     public  string  FormDataHashCode {  get set ; }
     public  string  SignatureDivID {  get set ; }
}

然后在控制台Main函数内部输入如下代码:

1
2
3
4
5
6
7
8
9
string  json =  @"[{'TaskRoleSpaces':'','TaskRoles':'','ProxyUserID':'5d9ad5dc1c5e494db1d1b4d8d79b60a7','UserID':'5d9ad5dc1c5e494db1d1b4d8d79b60a7','UserName':'姓名','UserSystemName':'2234','OperationName':'送合同负责人','OperationValue':'同意','OperationValueText':'','SignDate':'2013-06-19 10:31:26','Comment':'同意','FormDataHashCode':'','SignatureDivID':''},{'TaskRoleSpaces':'','TaskRoles':'','ProxyUserID':'2c96c3943826ea93013826eafe6d0089','UserID':'2c96c3943826ea93013826eafe6d0089','UserName':'姓名2','UserSystemName':'1234','OperationName':'送合同负责人','OperationValue':'同意','OperationValueText':'','SignDate':'2013-06-20 09:37:11','Comment':'同意','FormDataHashCode':'','SignatureDivID':''}]
" ;
                       
             List<JobInfo> jobInfoList = JsonConvert.DeserializeObject<List<JobInfo>>(json);
                       
             foreach  (JobInfo jobInfo  in  jobInfoList)
             {
                 Console.WriteLine( "UserName:"  + jobInfo.UserName +  "UserID:"  + jobInfo.UserID);
             }

这样就可以正常输出内容了。

我想肯定有人会问,如果有多层关系的json字符串该如何处理呢?没关系,一样的处理。

比如如何解析这个json字符串:[{'phantom':true,'id':'20130717001','data':{'MID':1019,'Name':'aaccccc','Des':'cc','Disable':'启用','Remark':'cccc'}}]  ?

首先还是定义实体类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public  class  Info
{
     public  string  phantom {  get set ; }
     public  string  id {  get set ; }
     public  data data {  get set ; }
}
                  
public  class  data
{
     public  int  MID {  get set ; }
     public  string  Name {  get set ; }
     public  string  Des {  get set ; }
     public  string  Disable {  get set ; }
     public  string  Remark {  get set ; }
}

然后在main方法里面,键入:

1
2
3
4
5
6
7
string  json =  @"[{'phantom':true,'id':'20130717001','data':{'MID':1019,'Name':'aaccccc','Des':'cc','Disable':'启用','Remark':'cccc'}}]" ;
List<Info> infoList = JsonConvert.DeserializeObject<List<Info>>(json);
             
foreach  (Info info  in  infoList)
{
     Console.WriteLine( "id:"  + info.data.MID);
}

   按照我们的预期,应该能够得到1019的结果。


截图为证:

Center

另外,对于有些json格式不是标准的,可以使用通用的方法进行解析。

1
2
3
4
5
6
string  jsonText =  @" {'Count':1543,'Items':[{'UnitID':6119,'UnitName':'C'}]}" ;
JsonReader reader =  new  JsonTextReader( new  StringReader(jsonText));
while  (reader.Read())
{
     Console.WriteLine(reader.TokenType +  "\t\t"  + reader.ValueType +  "\t\t"  + reader.Value);
}

附Newtonsoft.Json.dll下载地址:下载吧



本文转自 guwei4037  51CTO博客,原文链接:http://blog.51cto.com/csharper/1344190

相关文章
|
3天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
1天前
|
XML Web App开发 JavaScript
|
6天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
7天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
7天前
|
C# 前端开发 UED
WPF数据验证实战:内置控件与自定义规则,带你玩转前端数据验证,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,数据验证是确保输入正确性的关键环节。前端验证能及时发现错误,提升用户体验和程序可靠性。本文对比了几种常用的WPF数据验证方法,并通过示例展示了如何使用内置验证控件(如`TextBox`)及自定义验证规则实现有效验证。内置控件结合`Validation`类可快速实现简单验证;自定义规则则提供了更灵活的复杂逻辑支持。希望本文能帮助开发者更好地进行WPF数据验证。
25 0
|
7天前
|
Java Spring 容器
彻底改变你的编程人生!揭秘 Spring 框架依赖注入的神奇魔力,让你的代码瞬间焕然一新!
【8月更文挑战第31天】本文介绍 Spring 框架中的依赖注入(DI),一种降低代码耦合度的设计模式。通过 Spring 的 DI 容器,开发者可专注业务逻辑而非依赖管理。文中详细解释了 DI 的基本概念及其实现方式,如构造器注入、字段注入与 setter 方法注入,并提供示例说明如何在实际项目中应用这些技术。通过 Spring 的 @Configuration 和 @Bean 注解,可轻松定义与管理应用中的组件及其依赖关系,实现更简洁、易维护的代码结构。
11 0
|
9天前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
1月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
51 6
|
16天前
|
测试技术 Python
python自动化测试中装饰器@ddt与@data源码深入解析
综上所述,使用 `@ddt`和 `@data`可以大大简化写作测试用例的过程,让我们能专注于测试逻辑的本身,而无需编写重复的测试方法。通过讲解了 `@ddt`和 `@data`源码的关键部分,我们可以更深入地理解其背后的工作原理。
16 1
|
26天前
|
开发者 Python
深入解析Python `httpx`源码,探索现代HTTP客户端的秘密!
深入解析Python `httpx`源码,探索现代HTTP客户端的秘密!
60 1

热门文章

最新文章

推荐镜像

更多
下一篇
DDNS