【问题标题】:Is this possible in JSON?这在 JSON 中可能吗?
【发布时间】:2012-02-09 10:37:35
【问题描述】:

我目前正在使用 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 个,但格式将与名称值对相同

【问题讨论】:

  • 您可能可以使用dynamic 关键字来创建字典字典,例如dictionary

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


【解决方案1】:

编辑:我很抱歉,但不知何故,我将您的问题解释为您想要 序列化,而不是 反序列化(但无论如何我都会保留原件,因为我认为这是很好的知识:))。

尝试将您的 JSON 字符串反序列化为 Dictionary&lt;string,string&gt; 而不是您的 Attribute。我有预感它可能会起作用。然后,您可以调整其余代码以使用该字典,或者您可以转换为 Attribute 实例的集合。


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

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

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

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

attributes.color
attributes.price

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

...如果您将Dictionary&lt;string,string&gt; 序列化为 JSON 字符串,则可以使用 JavaScriptSerializer 实现此目的(换句话说,将您的 Attribute 类更改为 KeyValuePair&lt;string,string&gt;,或者以其他方式创建此类字典。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    相关资源
    最近更新 更多