gpt4 book ai didi

c# - JavaScriptSerializer : Unable to deserialize object containing HashSet field

转载 作者:行者123 更新时间:2023-11-30 20:55:20 32 4
gpt4 key购买 nike

我正在尝试使用 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);

错误并显示以下消息:

Object of type 'System.Collections.Generic.List1[System.Int32]'
cannot be converted to type
'System.Collections.Generic.HashSet
1[System.Int32]'.

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

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

最佳答案

What is the solution to this?

使用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;

关于c# - JavaScriptSerializer : Unable to deserialize object containing HashSet field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18381731/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com