一、C#对XML格式数据的解析
1、用XMLDocument来解析
XmlDocument xmlDocument = new XmlDocument();
xmlDocumentLoad("testxml");
//创建新节点
XmlElement nn = xmlDocumentCreateElement("image");
nnSetAttribute("imageUrl", "jpg");
XmlNode node = xmlDocumentSelectSingleNode("content/section/page/gall/folder");//定位到folder节点
nodeAppendChild(nn);//附加新节点
//保存
xmlDocumentSave("testxml");
</div>
2、用Linq to XML来解析
可以通过遍历,来获得你想要的节点的内容或属性
XElement root = XElementLoad("testxml");
foreach (XAttribute att in rootAttributes())
{
rootAdd(new XElement(attName, (string)att));
}
ConsoleWriteLine(root);
</div>
3、附一个详细点的例子
比如要解析如下的xml文件,将其转化为Ilist对象。
<?xml version="0" encoding="utf-8"?> <Car> <carcost> <ID>20130821133126</ID> <uptime>60</uptime> <downtime>30</downtime> <price>4</price> </carcost> <carcost> <ID>20130821014316</ID> <uptime>120</uptime> <downtime>60</downtime> <price>3</price> </carcost> <carcost> <ID>20130822043127</ID> <uptime>30</uptime> <downtime>0</downtime> <price>5</price> </carcost> <carcost> <ID>20130822043341</ID> <uptime>120以上!</uptime> <downtime>120</downtime> <price>2</price> </carcost> </Car></div>
在控制台应用程序中输入如下代码即可。
class Program
{
static void Main(string[] args)
{
IList<CarCost> resultList = new List<CarCost>();
XmlDocument xmlDocument = new XmlDocument();
xmlDocumentLoad("testxml");
XmlNodeList xmlNodeList = xmlDocumentSelectSingleNode("Car")ChildNodes;
foreach (XmlNode list in xmlNodeList)
{
CarCost carcost = new CarCost
(
listSelectSingleNode("ID")InnerText,
listSelectSingleNode("uptime")InnerText,
listSelectSingleNode("downtime")InnerText,
floatParse(listSelectSingleNode("price")InnerText)
);
resultListAdd(carcost);
}
IEnumerator enumerator = resultListGetEnumerator();
while (enumeratorMoveNext())
{
CarCost carCost = enumeratorCurrent as CarCost;
ConsoleWriteLine(carCostID + " " + carCostUpTime + " " + carCostDownTime + " " + carCostPrice);
}
}
}
public class CarCost
{
public CarCost(string id, string uptime, string downtime, float price)
{
thisID = id;
thisUpTime = uptime;
thisDownTime = downtime;
thisPrice = price;
}
public string ID { get; set; }
public string UpTime { get; set; }
public string DownTime { get; set; }
public float Price { get; set; }
}
</div>
二、C#对JSON格式数据的解析
引用NewtonsoftJsondll文件,来解析。
比如:有个要解析的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":""}]
</div>
首先定义个实体类:
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; }
}
</div>
然后在控制台Main函数内部输入如下代码:
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 = JsonConvertDeserializeObject<List<JobInfo>>(json);
foreach (JobInfo jobInfo in jobInfoList)
{
ConsoleWriteLine("UserName:" + jobInfoUserName + "UserID:" + jobInfoUserID);
}
</div>
这样就可以正常输出内容了。
我想肯定有人会问,如果有多层关系的json字符串该如何处理呢?没关系,一样的处理。
比如如何解析这个json字符串:[{'phantom':true,'id':'20130717001','data':{'MID':1019,'Name':'aaccccc','Des':'cc','Disable':'启用','Remark':'cccc'}}] ?
首先还是定义实体类:
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; }
}
</div>
然后在main方法里面,键入:
string json = @"[{'phantom':true,'id':'20130717001','data':{'MID':1019,'Name':'aaccccc','Des':'cc','Disable':'启用','Remark':'cccc'}}]";
List<Info> infoList = JsonConvertDeserializeObject<List<Info>>(json);
foreach (Info info in infoList)
{
ConsoleWriteLine("id:" + infodataMID);
}
</div>
按照我们的预期,应该能够得到1019的结果。
截图为证:

再附一个JSON解析的例子,来自于兔子家族—二哥在本篇博客下的回复。
JSON字符串1:{success:true,data:{id:100001,code:\"JTL-Z38005\",name:\"奥迪三轮毂\",location:\"A-202\",qty:100,bins:[{code:\"JTL-Z38001\",name:\"奥迪三轮毂\",location:\"A-001\",qty:100},{ code:\"JTL-Z38002\",name:\"奥迪三轮毂\",location:\"A-002\",qty:100}]}}
定义数据结构:
public class Data
{
public Boolean success { get; set; }
public Data1 data { ge

