求JSON格式转换成LIST格式,

ctmb520 2013-05-29 11:57:43
有如下一段字符
"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
...全文
3276 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Newtonsoft.json 类库是公认的和非常流行的,你可以放心使用。 而这个东东,尽管不能反序列化为.net对象,那么使用linq处理token元数据格式处理其实也非常简单。
  • 打赏
  • 举报
回复
引用 Newtonsoft.json 类库后,可以写
string json = @"{""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""}
        },
        }";
var obj = (JObject)(JObject.Parse(json)["skuMap"]);
var result = from k in obj.Properties()
                let names = k.Name.Split(new string[] { ">" }, 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();
yyl8781697 2013-05-31
  • 打赏
  • 举报
回复
LitJson也不错了,代码量少,功能单一,就是去序列化和反序列化Json的,速度很快
人生导师 2013-05-30
  • 打赏
  • 举报
回复
 /// <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);
        }
    }
q107770540 2013-05-30
  • 打赏
  • 举报
回复
mark一下,明天抽空看看 C#提供了现成的操作JSON的类,也可用第三方的dll
ctmb520 2013-05-30
  • 打赏
  • 举报
回复
15楼是高人哪,但使用的好像需要引用很大一个DLL文件吧,幸苦了,继续寻找简单方法
ctmb520 2013-05-30
  • 打赏
  • 举报
回复
我也在网站找到这段代码,我试了一下好像没用
我要坚强 2013-05-30
  • 打赏
  • 举报
回复
15楼方法
showjim 2013-05-30
  • 打赏
  • 举报
回复
如果需要整体一起处理,需要定义两个类,比如
        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"":{
""灰色>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""}
}}";
            skuMaps value = fastCSharp.setup.cSharp.ajax.parseJson.Get<skuMaps>(json);
我要坚强 2013-05-30
  • 打赏
  • 举报
回复
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));
序列化出来是不是跟你的样式很相象啊, 可惜你有>哈哈
showjim 2013-05-30
  • 打赏
  • 举报
回复
你这个JSON是有问题,需要单独处理skuMap这个对象,可以试试fastCSharp
        class skuMap
        {
            public string type;
            public int canBookCount;
            public int saleCount;
            public string specId;
        }
            string json = @"{
""灰色>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""}
}";
            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;
                });
qldsrx 2013-05-30
  • 打赏
  • 举报
回复
你的这个JSON格式根本不是对应List的,只是对应了一个对象,而且本身也有语法错误,不符合Json格式,故只能通过正则进行匹配,无法通过Json转换。
我要坚强 2013-05-30
  • 打赏
  • 举报
回复
skuMap 白色>XXL 灰色>L...都是成员名不是成员值要注意
我要坚强 2013-05-30
  • 打赏
  • 举报
回复
你的json格式有问题,要先处理你一下,你看 public class cc { public bb skuMap { get; set; } } [DataContract] public class bb { public aa 灰色>L { get; set; } ..... } public class aa { public int canBookCount{get;set;} public int saleCount{get;set;} public string specId{get;set;} } 这样的形式,c#肯定过不去的
ctmb520 2013-05-30
  • 打赏
  • 举报
回复
感谢网友的顶力相助,希望能提供相应的实例,正常的JSON格式我用以上的方法确实可以实现在,但该JSON格式不知道为什么,无法处理
ctmb520 2013-05-30
  • 打赏
  • 举报
回复
JSONObject 你这个是JAVA的吧?C#里有个类库吗?
xiaogui340 2013-05-30
  • 打赏
  • 举报
回复
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); }
City_member 2013-05-30
  • 打赏
  • 举报
回复
String json=你的json字符串; JSONObject jsonObject=JSONObject.fromObject(json); json=jsonObject.getString("category_attribute_search_response"); 你的类型 object=(你的类型)JSONObject.toBean(json,你的class);
ctmb520 2013-05-30
  • 打赏
  • 举报
回复
我用了,但这个JSON格式好像自定义的,没有反序列化成功
WintelZhao 2013-05-30
  • 打赏
  • 举报
回复
json可以直接封装成对象的; 参考System.Xml.Serialization;

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧