目前我的Dictionary<string, string>
已序列化为:
{
"Uri" : "/site/Default.aspx",
"time-taken" : "232"
}
我希望Json.net将其序列化为
{
"Uri" : "/site/Default.aspx",
"time-taken" : 232
}
使用Json.net实现这一目标最简单的方法是什么?我不想用正确的类型而不是字典创建一个新类,因为键很多并且可能会改变。我知道int
的密钥。
答案 0 :(得分:1)
我想我会创建一个帮助方法,将数据从字典复制到JObject
,如下所示:
public static class JsonHelper
{
public static string SerializeDictionary(Dictionary<string, string> dict, IEnumerable<string> intKeys)
{
JObject obj = new JObject();
foreach (var kvp in dict)
{
int intValue;
if (intKeys.Contains(kvp.Key) && int.TryParse(kvp.Value, out intValue))
obj.Add(kvp.Key, intValue);
else
obj.Add(kvp.Key, kvp.Value);
}
return obj.ToString(Formatting.Indented);
}
}
然后像这样使用它:
var dict = new Dictionary<string, string>();
dict.Add("AnInt", "123");
dict.Add("AString", "abc");
dict.Add("AnotherInt", "456");
dict.Add("KeepThisAsString", "789");
dict.Add("NotAnInt", "xyz");
var intKeys = new string[] { "AnInt", "AnotherInt" };
string json = JsonHelper.SerializeDictionary(dict, intKeys);
Console.WriteLine(json);
输出:
{
"AnInt": 123,
"AString": "abc",
"AnotherInt": 456,
"KeepThisAsString": "789",
"NotAnInt": "xyz"
}