【发布时间】:2016-08-22 16:32:44
【问题描述】:
我有一个派生自 Dictionary 的类。类本身也有一个ClientId 属性。我想使用Json.Net将这个类的集合反序列化为JSON字符串所以遵循文档here
public interface IClientSettings: IDictionary<string, string>
{
string ClientId { get; set; }
}
public class ClientSettings : Dictionary<string, string>, IClientSettings
{
public string ClientId { get; set; }
}
然后我将列表反序列化为字符串
var list = new List<IClientSettings>();
var client1 = new ClientSettings();
client1.ClientId = "Client1";
client1.Add("key1", "value1");
client1.Add("key2", "value2");
client1.Add("key3", "value3");
var client2 = new ClientSettings();
client1.ClientId = "Client2";
client2.Add("key1", "value1");
client2.Add("key2", "value2");
client2.Add("key3", "value3");
list.Add(client1);
list.Add(client2);
string json = JsonConvert.SerializeObject(list, Formatting.Indented);
Console.WriteLine(json);
但是,这不会序列化 Clientid 属性。下面是输出。
[
{
"key1": "value1",
"key2": "value2",
"key3": "value3"
},
{
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
]
我不确定我在这里缺少什么。我还发现了建议 here 建议进行自定义序列化,这是我唯一的选择吗?
【问题讨论】:
-
您是否有理由从字典中派生而不是拥有字典属性?您可以通过一个具有 2 个属性的简单类轻松解决这个问题,字符串 ClientID 和 Dictionary
等等。它可以很好地序列化(太长,如上,字符串,字典)...输出 -[{"myDict":{"key1":"value1","key2":"value2","key3":" value3"},"ClientID":"Client1"},{"myDict":{"key1":"value1","key2":"value2","key3":"value3"},"ClientID":"Client2 "}] -
先前评论中提到的类。 [可序列化] public class ClientSettings { public string ClientID { get;放; } 公共字典 myDict; public ClientSettings() { myDict = new Dictionary
(); } public void Add(string key, string value) { myDict.Add(key, value); } }