将JSON数据反序列化为Dictionary <string,string =“”> </string,>时出错

时间:2014-02-28 08:39:36

标签: javascript json serialization

这是我想要使用本机Javascript支持反序列化为Dictionary的JSON。

string data = "{"Symptom":[true,true,true],"Action":[true,true],"AllArea":true}";

但是当我尝试使用下面的代码反序列化时

Dictionary values = new System.Web.Script.Serialization.JavaScriptSerializer()。Deserialize&gt;(data);

它给我一个错误陈述 "Type 'System.String' is not supported for deserialization of an array"

我正在使用.Net Framework 3.5。请帮我完成这件事。

1 个答案:

答案 0 :(得分:0)

我想你不能直接将它转换成字典...我认为deserializer需要一个相应的类型,其中可理解的属性名称带有类型,

我认为您可以转换为type,然后生成dictionary,例如:

public class MyClass
    {
        public List<bool> Symptom { get; set; }
        public List<bool> Action { get; set; }
        public bool AllArea { get; set; }

        public Dictionary<string, List<bool>> getDic()
        {
            // this is for example, and many many different may be implement
            // maybe some `reflection` for add property dynamically or ...

            var oDic = new Dictionary<string, List<bool>>();
            oDic.Add("Symptom", this.Symptom);
            oDic.Add("Action", this.Action);
            oDic.Add("AllArea", new List<bool>() { AllArea });
            return oDic;
        }
    }

然后:

string data = "{\"Symptom\":[true,true,true],\"Action\":[true,true],\"AllArea\":true}";
System.Web.Script.Serialization.JavaScriptSerializer aa = new System.Web.Script.Serialization.JavaScriptSerializer();
var o = aa.Deserialize<MyClass>(data);
var dic = o.getDic();

无论如何,这是一个很好的问题