var json = {
"result":
{
"total": 38,
"toReturn":
[{
"sellerAlipayId": "2088302179419572",
"tradeType": "6",
"orderEntries":
[{
"id": 306623282075090,
"price": 2100,
"entryStatus": "waitsellersend",
"productPic": [
"http://img.china.alibaba.com:80//img/order/trading/090/570/282326603/657902513_2115513935.310x310.jpg"
],
"quantity": 1.0,
"productName": "日韩打底衫热销休闲时尚修身秋冬女装批发2011秋季新款长袖t恤",
"specInfo": [
{ "specValue": "灰色", "specName": "颜色" },
{ "specValue": "XL", "specName": "尺码" }
],
"entryDiscount": 0,
"sourceId": 1194532438
},
{
"id": 306623282085090, "price": 2100, "entryStatus": "waitsellersend", "productPic": ["http://img.china.alibaba.com:80//img/order/trading/090/580/282326603/657902513_2115513935.310x310.jpg"], "quantity": 1.0, "productName": "日韩打底衫热销休闲时尚修身秋冬女装批发2011秋季新款长袖t恤", "specInfo": [{ "specValue": "灰色", "specName": "颜色" }, { "specValue": "L", "specName": "尺码" }], "entryDiscount": 0, "sourceId": 1194532438
},
{
"id": 306623282095090, "price": 2500, "entryStatus": "waitsellersend", "productPic": ["http://img.china.alibaba.com:80//img/order/trading/090/590/282326603/639300751_2115513935.310x310.jpg"], "quantity": 1.0, "productName": "日韩打底衫热销休闲时尚修身秋冬女装批发2011秋季新款长袖t恤", "specInfo": [{ "specValue": "米黄", "specName": "颜色" }, { "specValue": "XL", "specName": "尺码" }], "entryDiscount": 0, "sourceId": 1189375286
},
{
"id": 306623282105090, "price": 2500, "entryStatus": "waitsellersend", "productPic": ["http://img.china.alibaba.com:80//img/order/trading/090/501/282326603/639300751_2115513935.310x310.jpg"], "quantity": 1.0, "productName": "日韩打底衫热销休闲时尚修身秋冬女装批发2011秋季新款长袖t恤", "specInfo": [{ "specValue": "米黄", "specName": "颜色" }, { "specValue": "L", "specName": "尺码" }], "entryDiscount": 0, "sourceId": 1189375286
}],
"gmtCreate": "2013-03-09 22:33:41",
"alipayTradeId": "2013030903674879",
"carriage": 1000,
"status": "waitsellersend",
"toPost": "050000",
"buyerAlipayId": "2088702315601799",
"sumPayment": 10200,
"buyerMemberId": "b2b-780439050",
"toArea": "河北省 石家庄市 桥西区 西里街XXXXX",
"discount": 0,
"id": 306623282065090,
"toMobile": "15130XXXXXX",
"sellerMemberId": "xiaogoXXXXXX",
"gmtPayment": "2013-03-09 22:35:01",
"toFullName": "XXX"
}],
"success": true
}
};如阿里巴巴返回了如上的一段字符串JSON,上面是我对这个字符串进行格式化的结果
那我用什么方法可以最简单的转化为C#可访问形式的对像呢?如
result.toReturn[0].sellerAlipayId 得到 2088302179419572万分感谢
{
public myResultType result;
}public class myResultType
{
public int total;
public bool success;
public myReturnType[] toReturn;
}
public class myReturnType
{
public string sellerAlipayId;
.........
}其中 ..... 部分与其它部分一样,都是根据你的理解来定义属性和子类型。如果不定义,那么也无妨,只不过是解析时忽略掉那个属性而已。一旦定义了class,那么使用一句代码就可以从字符串反序列出.net内部对象了。你可以使用.net内置的json反序化方法,或者任何第三方json处理的类库来反序列化。
var a= (JArray)result["toReturn"];
var b=(JObject)a[0];
var c=(string)b["sellerAlipayId"];
这种方式临时写一两个也没有什么麻烦的。但是如果大量地需要这样去查找,那么可读性就差很多。既然你需要小心地编写这种一层层去查找的代码,不如干净利落地定义class,然后就放心地去直接写
result.toReturn[0].sellerAlipayId
这就得到结果了。因此要问“到底是先定义class模型的方法更简单,还是仅仅离散地分层查找属性更简单?”的问题,还是很需要自己权衡。其实两种方式都很简单。有些人认为越是访问低级的接口越简单,有些人认为越是封装好直接访问的高级的金额口越简单,每个人的出发点不同。
---》将json字符串自动粘贴成class下面就是我把你json字符串,直接粘贴到vs后,由这个插件自动生成的class public class Rootobject
{
public Result result { get; set; }
} public class Result
{
public int total { get; set; }
public Toreturn[] toReturn { get; set; }
public bool success { get; set; }
} public class Toreturn
{
public string sellerAlipayId { get; set; }
public string tradeType { get; set; }
public Orderentry[] orderEntries { get; set; }
public string gmtCreate { get; set; }
public string alipayTradeId { get; set; }
public int carriage { get; set; }
public string status { get; set; }
public string toPost { get; set; }
public string buyerAlipayId { get; set; }
public int sumPayment { get; set; }
public string buyerMemberId { get; set; }
public string toArea { get; set; }
public int discount { get; set; }
public long id { get; set; }
public string toMobile { get; set; }
public string sellerMemberId { get; set; }
public string gmtPayment { get; set; }
public string toFullName { get; set; }
} public class Orderentry
{
public long id { get; set; }
public int price { get; set; }
public string entryStatus { get; set; }
public string[] productPic { get; set; }
public float quantity { get; set; }
public string productName { get; set; }
public Specinfo[] specInfo { get; set; }
public int entryDiscount { get; set; }
public int sourceId { get; set; }
} public class Specinfo
{
public string specValue { get; set; }
public string specName { get; set; }
}ps:这个插件已经出来有段时间了,只是以前是bete版,选择性粘贴不支撑非e文区字符集设定,你用的时候需要去在“区域和语言”里换到e文区,这个比较麻烦,所以我们没有推荐使用,不过最近这个插件刚刚升级成正式版,所以已经可以正常使用了,我可以推荐大家装一下这东西一个简单介绍:http://www.infoq.com/cn/news/2013/02/asp-net-web-tools-2012-2
官方下载:http://www.asp.net/vnext