有如下一段字符
"skuMap":{
"灰色>L":{"canBookCount":905,"saleCount":91,"specId":"43b0e72e98731aed69e1f0cc7d64bf4d"},
"灰色>XL":{"canBookCount":929,"saleCount":70,"specId":"893746f5330dc3273d24aa1ac1a9a8b5"},
"灰色>XXL":{"canBookCount":942,"saleCount":57,"specId":"42d994cba0210528142a743d4069700f"},
"白色>L":{"canBookCount":862,"saleCount":136,"specId":"82114cbd2c10b5e97b01af1510807e2d"},
"白色>XL":{"canBookCount":881,"saleCount":118,"specId":"c45d8408137e34adf8e695250c42a2e9"},
"白色>XXL":{"canBookCount":917,"saleCount":82,"specId":"df78564262818d6eb0c428a37ab4a251"},
"蓝色>L":{"canBookCount":962,"saleCount":35,"specId":"e959b6ab7c355e403a3312c75bd3d5b4"},
"蓝色>XL":{"canBookCount":973,"saleCount":26,"specId":"27402e07efd89afa50733afa94cd6976"},
"蓝色>XXL":{"canBookCount":985,"saleCount":14,"specId":"358b6c3b52bf711ac8ecfe7513a4f3ad"}
},要求存入一个集合中,按如下结构存入list<T>集合颜色  尺码    库存    出售量    编号
----------------------------------------
灰色  L       905     91       43b0e72e98731aed69e1f0cc7d64bf4d
灰色  XL      929     70       893746f5330dc3273d24aa1ac1a9a8b5
JSONlist集合json map格式

解决方案 »

  1.   

    一下,明天抽空看看C#提供了现成的操作JSON的类,也可用第三方的dll
      

  2.   

     /// <summary>
        /// JSON格式字符转换为T类型的对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="jsonStr"></param>
        /// <returns></returns>
        public static T ParseFormByJson<T>(string jsonStr)
        {
            T obj = Activator.CreateInstance<T>();
            using (System.IO.MemoryStream ms =
            new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(jsonStr)))
            {
                System.Runtime.Serialization.Json.DataContractJsonSerializer serializer =
                new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(T));
                return (T)serializer.ReadObject(ms);
            }
        }
      

  3.   

    json可以直接封装成对象的;
    参考System.Xml.Serialization;
      

  4.   

    我用了,但这个JSON格式好像自定义的,没有反序列化成功
      

  5.   

    String json=你的json字符串; JSONObject jsonObject=JSONObject.fromObject(json); json=jsonObject.getString("category_attribute_search_response"); 你的类型 object=(你的类型)JSONObject.toBean(json,你的class);
      

  6.   

           Newtonsoft.Json.dll
            // JSON -> OBJECT
            public static T JsonToObject<T>(string jsonData)
            {
                //return Newtonsoft.Json.JavaScriptConvert.DeserializeObject<T>(jsonData);
                return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(jsonData);
            }
      

  7.   

    JSONObject 你这个是JAVA的吧?C#里有个类库吗?
      

  8.   

    感谢网友的顶力相助,希望能提供相应的实例,正常的JSON格式我用以上的方法确实可以实现在,但该JSON格式不知道为什么,无法处理
      

  9.   

    你的json格式有问题,要先处理你一下,你看
    public class cc
    {
        public bb skuMap { get; set; }
    }
    [DataContract]
    public class bb
    {
        public aa 灰色&gt;L { get; set; }
        .....
    }
    public class aa
    {  
        public int canBookCount{get;set;} 
        public int saleCount{get;set;}
        public string specId{get;set;}
    }
    这样的形式,c#肯定过不去的
      

  10.   

    skuMap
    白色&gt;XXL
     灰色&gt;L...都是成员名不是成员值要注意
      

  11.   

    你的这个JSON格式根本不是对应List的,只是对应了一个对象,而且本身也有语法错误,不符合Json格式,故只能通过正则进行匹配,无法通过Json转换。
      

  12.   

    你这个JSON是有问题,需要单独处理skuMap这个对象,可以试试fastCSharp
            class skuMap
            {
                public string type;
                public int canBookCount;
                public int saleCount;
                public string specId;
            }
                string json = @"{
    ""灰色&gt;L"":{""canBookCount"":905,""saleCount"":91,""specId"":""43b0e72e98731aed69e1f0cc7d64bf4d""},
    ""灰色&gt;XL"":{""canBookCount"":929,""saleCount"":70,""specId"":""893746f5330dc3273d24aa1ac1a9a8b5""},
    ""灰色&gt;XXL"":{""canBookCount"":942,""saleCount"":57,""specId"":""42d994cba0210528142a743d4069700f""},
    ""白色&gt;L"":{""canBookCount"":862,""saleCount"":136,""specId"":""82114cbd2c10b5e97b01af1510807e2d""},
    ""白色&gt;XL"":{""canBookCount"":881,""saleCount"":118,""specId"":""c45d8408137e34adf8e695250c42a2e9""},
    ""白色&gt;XXL"":{""canBookCount"":917,""saleCount"":82,""specId"":""df78564262818d6eb0c428a37ab4a251""},
    ""蓝色&gt;L"":{""canBookCount"":962,""saleCount"":35,""specId"":""e959b6ab7c355e403a3312c75bd3d5b4""},
    ""蓝色&gt;XL"":{""canBookCount"":973,""saleCount"":26,""specId"":""27402e07efd89afa50733afa94cd6976""},
    ""蓝色&gt;XXL"":{""canBookCount"":985,""saleCount"":14,""specId"":""358b6c3b52bf711ac8ecfe7513a4f3ad""}
    }";
                fastCSharp.setup.cSharp.ajax.jsonNode node = new fastCSharp.setup.cSharp.ajax.jsonParser().Parse(json);
                skuMap[] values = node.Dictionary.getArray(value =>
                    {
                        skuMap skuMap = fastCSharp.setup.cSharp.ajax.parseJson.Get<skuMap>(value.Value);
                        skuMap.type = value.Key;
                        return skuMap;
                    });
      

  13.   

    public class cc
    {
        public bb skuMap { get; set; }
    }public class bb
    {
        public aa name1 { get; set; }
        public aa name2 { get; set; }
        public aa name3 { get; set; }
    }public class aa
    {
        public int canBookCount { get; set; }
        public int saleCount { get; set; }
        public string specId { get; set; }
    } aa aaa = new aa() { canBookCount = 1, saleCount = 2, specId = "43b0e72e98731aed69e1f0cc7d64bf4d" };
            bb bbb = new bb() { name1 = aaa, name2 = aaa, name3 = aaa };
            cc ccc = new cc() { skuMap = bbb };
            Console.WriteLine(JSON.stringify(ccc));序列化出来是不是跟你的样式很相象啊, 可惜你有&gt;哈哈
      

  14.   

    如果需要整体一起处理,需要定义两个类,比如
            class skuMap
            {
                public string type;
                public int canBookCount;
                public int saleCount;
                public string specId;
            }
            class skuMaps
            {
                public object skuMap;
                public skuMap[] skuMapArray
                {
                    get
                    {
                        return (((fastCSharp.setup.cSharp.ajax.jsonNode)skuMap).Dictionary).getArray(value =>
                            {
                                skuMap newValue = fastCSharp.setup.cSharp.ajax.parseJson.Get<skuMap>(value.Value);
                                newValue.type = value.Key;
                                return newValue;
                            });
                    }
                }
            }
                string json = @"{""skuMap"":{
    ""灰色&gt;L"":{""canBookCount"":905,""saleCount"":91,""specId"":""43b0e72e98731aed69e1f0cc7d64bf4d""},
    ""灰色&gt;XL"":{""canBookCount"":929,""saleCount"":70,""specId"":""893746f5330dc3273d24aa1ac1a9a8b5""},
    ""灰色&gt;XXL"":{""canBookCount"":942,""saleCount"":57,""specId"":""42d994cba0210528142a743d4069700f""},
    ""白色&gt;L"":{""canBookCount"":862,""saleCount"":136,""specId"":""82114cbd2c10b5e97b01af1510807e2d""},
    ""白色&gt;XL"":{""canBookCount"":881,""saleCount"":118,""specId"":""c45d8408137e34adf8e695250c42a2e9""},
    ""白色&gt;XXL"":{""canBookCount"":917,""saleCount"":82,""specId"":""df78564262818d6eb0c428a37ab4a251""},
    ""蓝色&gt;L"":{""canBookCount"":962,""saleCount"":35,""specId"":""e959b6ab7c355e403a3312c75bd3d5b4""},
    ""蓝色&gt;XL"":{""canBookCount"":973,""saleCount"":26,""specId"":""27402e07efd89afa50733afa94cd6976""},
    ""蓝色&gt;XXL"":{""canBookCount"":985,""saleCount"":14,""specId"":""358b6c3b52bf711ac8ecfe7513a4f3ad""}
    }}";
                skuMaps value = fastCSharp.setup.cSharp.ajax.parseJson.Get<skuMaps>(json);
      

  15.   

    15楼是高人哪,但使用的好像需要引用很大一个DLL文件吧,幸苦了,继续寻找简单方法
      

  16.   

    引用 Newtonsoft.json 类库后,可以写string json = @"{""skuMap"":{
            ""灰色&gt;L"":{""canBookCount"":905,""saleCount"":91,""specId"":""43b0e72e98731aed69e1f0cc7d64bf4d""},
            ""灰色&gt;XL"":{""canBookCount"":929,""saleCount"":70,""specId"":""893746f5330dc3273d24aa1ac1a9a8b5""},
            ""灰色&gt;XXL"":{""canBookCount"":942,""saleCount"":57,""specId"":""42d994cba0210528142a743d4069700f""},
            ""白色&gt;L"":{""canBookCount"":862,""saleCount"":136,""specId"":""82114cbd2c10b5e97b01af1510807e2d""},
            ""白色&gt;XL"":{""canBookCount"":881,""saleCount"":118,""specId"":""c45d8408137e34adf8e695250c42a2e9""},
            ""白色&gt;XXL"":{""canBookCount"":917,""saleCount"":82,""specId"":""df78564262818d6eb0c428a37ab4a251""},
            ""蓝色&gt;L"":{""canBookCount"":962,""saleCount"":35,""specId"":""e959b6ab7c355e403a3312c75bd3d5b4""},
            ""蓝色&gt;XL"":{""canBookCount"":973,""saleCount"":26,""specId"":""27402e07efd89afa50733afa94cd6976""},
            ""蓝色&gt;XXL"":{""canBookCount"":985,""saleCount"":14,""specId"":""358b6c3b52bf711ac8ecfe7513a4f3ad""}
            },
            }";
    var obj = (JObject)(JObject.Parse(json)["skuMap"]);
    var result = from k in obj.Properties()
                    let names = k.Name.Split(new string[] { "&gt;" }, StringSplitOptions.None)
                    let v = (JObject)k.Value
                    select new
                    {
                        颜色 = names[0],
                        尺码 = names[1],
                        库存 = (int)v["canBookCount"],
                        出售量 = (int)v["saleCount"],
                        编号 = (string)v["specId"]
                    };
    var r = result.ToList();
      

  17.   

    Newtonsoft.json 类库是公认的和非常流行的,你可以放心使用。而这个东东,尽管不能反序列化为.net对象,那么使用linq处理token元数据格式处理其实也非常简单。
      

  18.   

    LitJson也不错了,代码量少,功能单一,就是去序列化和反序列化Json的,速度很快