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的结果。
截图为证:
另外,对于有些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