这可能在JSON中吗?

时间:2012-02-09 10:37:36

标签: c# asp.net json.net deserialization

我目前正在使用json.net!我知道如何反序列化json数据以及如何映射我们的类。现在我渴望一些疑问!

假设我的jsonstrings是

"attributes":{
            "color":"Brown",
            "condition":"Used",
            "currency":"USD",
            "price":"10500",
            "price_display":"$10,500",
         }

和我的属性类(我希望反序列化上面的字符串)是

Public class Attribute
{
        public string name{ get; set; }
        public string value{ get; set; }
}

现在我使用以下代码进行反序列化。!

 JavaScriptSerializer ser = new JavaScriptSerializer();
 <classname> p = ser.Deserialize<classname>(jsonString);

显然,这段代码根本不适用于上面的jsonstring。

现在如何在一个类中绑定这些名称值对?这可能吗?

以后,属性可能超过10但格式与名称值对相同

1 个答案:

答案 0 :(得分:1)

编辑:对不起,但不知怎的,我把你的问题解释为好像你想序列化,而不是反序列化(但我会保留下面的原文) ,我认为这是很好的知识:))。

尝试将您的JSON字符串反序列化为Dictionary<string,string>而不是Attribute。我有预感可能会奏效。然后,您可以调整代码的其余部分以使用该字典,也可以转换为Attribute个实例的集合。


下面的原始答案(与序列化相关,与您要求的相反)。

我不这么认为,但如果打算以这种方式在客户端使用它:

attributes["color"] // returns Brown
attributes["price"] // returns 10500

...那么你所追求的是“关联数组”,因为它等同于:

attributes.color
attributes.price

...因为它不是一个真正的数组,但它是一个对象(javascript提供了这两种引用对象属性的方法;例如window.onloadwindow["onload"]相同)...

...如果您将Dictionary<string,string>序列化为JSON字符串(换句话说,将Attribute类更改为KeyValuePair<string,string>,或者创建此类字典,则可以使用JavaScriptSerializer实现此目的不同。