我一直在对这个主题进行一些研究,除了将我的Dictionary更改为KeyValuePair对象的集合之外,我还没有找到任何解决以下情况的方法。
我有一个非常简单的模型,名为Client,它的属性之一是字典,最后我尝试序列化和反序列化字典模型。
这是我的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
namespace Automation
{
public class Client
{
public Client(IList<String> environments)
{
this.Environments = new Dictionary<String, Boolean>();
if (environments != null)
foreach (String environment in environments)
this.Environments[environment] = false;
}
public Dictionary<String, Boolean> Environments { get; set; }
}
public static class TestClass
{
public static void Serializer()
{
Dictionary<String, Client> newDict = new Dictionary<String, Client>();
newDict[Guid.NewGuid().ToString()] = new Client(new List<String>() { "A", "B" });
newDict[Guid.NewGuid().ToString()] = new Client(new List<String>() { "A", "B" });
newDict[Guid.NewGuid().ToString()] = new Client(new List<String>() { "A", "B" });
string json = JsonConvert.SerializeObject(newDict, Formatting.Indented);
try
{
Dictionary<String, Client> obj = JsonConvert.DeserializeObject<Dictionary<String, Client>>(json);
}
catch
{
}
}
}
}
这是生成的json:
{
"246af598-89b3-4198-b2cb-9f2d8fe6e03e": {
"Environments": {
"A": false,
"B": false
}
},
"fc43bb8d-65d3-4a97-86f3-cb67567845bd": {
"Environments": {
"A": false,
"B": false
}
},
"90c0158a-69e2-42b0-9072-e695c94a2f7a": {
"Environments": {
"A": false,
"B": false
}
}
}
这里是我在尝试反序列化时遇到的异常:
无法将当前JSON对象(例如{"name":"value"})反序列化为类型"System.Collections.Generic.IList`1[System.String]",因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。要修复此错误,请将JSON更改为JSON数组(例如[1,2,3]),或者更改反序列化的类型,使其成为可以从JSON对象反序列化的普通.NET类型(例如,不是像integer这样的基元类型,也不是像array或List这样的集合类型)。JsonObjectAttribute也可以添加到类型中,以强制它从JSON对象反序列化。路径'246af598-89b3-4198-b2cb-9f2d8fe6e03e.Environments.A',第4行,位置11。
任何想法,最终我都会通过SignalR请求通过有线发送这个序列化的对象。
感谢
只需为反序列化程序引入一个默认构造函数即可使用:
public class Client
{
public Client()
{ }
// your other constructor ...
}