3

我正在尝试使用 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.HashSet1[System.Int32]' 类型的对象。

显然,序列化程序无法从 JSON 表示中区分列表和集合。解决方案是什么?

注意:由于工作上的限制,我宁愿避免使用外部库。

4

2 回答 2

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;
于 2013-08-22T13:29:11.363 回答
0

这是我的简单但不是很好的解决方案,但它有效。

var dataList = new JavaScriptSerializer().Deserialize<List<int>>(returnData);
var data = new HashSet<int>(dataList);
于 2020-06-13T16:03:27.680 回答