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万分感谢

解决方案 »

  1.   

    可以用Json.net反序列化为JObject对象,通过索引访问。如果数据模型比较固定也可以自己先建立一个类去反序列化。
      

  2.   

    你需要根据对这个json的理解,自定义一个class,例如public class myDataType
    {
        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处理的类库来反序列化。
      

  3.   

    “最简单的转化为C#可访问形式的对像”其实全都很简单。假设说你经常要访问嵌入内部的某个属性,假设说你要用非常“离散”的方法去一层层去查找,例如写:
        var a= (JArray)result["toReturn"];
       var b=(JObject)a[0];
       var c=(string)b["sellerAlipayId"];
    这种方式临时写一两个也没有什么麻烦的。但是如果大量地需要这样去查找,那么可读性就差很多。既然你需要小心地编写这种一层层去查找的代码,不如干净利落地定义class,然后就放心地去直接写
        result.toReturn[0].sellerAlipayId
    这就得到结果了。因此要问“到底是先定义class模型的方法更简单,还是仅仅离散地分层查找属性更简单?”的问题,还是很需要自己权衡。其实两种方式都很简单。有些人认为越是访问低级的接口越简单,有些人认为越是封装好直接访问的高级的金额口越简单,每个人的出发点不同。
      

  4.   

    vs2012 里面有个微软维护的叫ASP.NET and Web Tools 2012.2的插件,其中一个功能就是在web项目中提供了2个扩展功能选择性粘贴--》将xml自动粘贴成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
      

  5.   

    json.net下载可以到这里:http://json.codeplex.com/releases/view/82120