我正在尝试使用JavaScriptSerializer从JSON字符串反序列化以下类的实例:
public class Filter
{
public HashSet<int> DataSources { get; set; }
}
以下是我要尝试的代码:
Filter f = new Filter();
f.DataSources = new HashSet<int>(){1,2};
string json = (new JavaScriptSerializer()).Serialize(f);
var g= (new JavaScriptSerializer()).Deserialize<Filter>(json);
错误输出以下消息:
类型为'System.Collections.Generic.List
1[System.Int32]' cannot be converted to type 'System.Collections.Generic.HashSet
的对象1 [System.Int32]'。
显然,序列化程序无法区分列表和JSON表示集。解决方案是什么?
注意:由于工作中的限制,我宁愿避免使用外部库。
答案 0 :(得分:4)
这是什么解决方案?
使用Json.Net。这段代码有用......
Filter f = new Filter();
f.DataSources = new HashSet<int>() { 1, 2 };
string json = JsonConvert.SerializeObject(f);
var g = JsonConvert.DeserializeObject<Filter>(json);
修改强>
DataContractJsonSerializer
似乎也有效......
DataContractJsonSerializer dcjs = new DataContractJsonSerializer(typeof(Filter));
var g2 = dcjs.ReadObject(new MemoryStream(Encoding.UTF8.GetBytes(json))) as Filter;
答案 1 :(得分:0)
这不是我的简单解决方案,但是可以用。
var dataList = new JavaScriptSerializer().Deserialize<List<int>>(returnData);
var data = new HashSet<int>(dataList);