将Dictionary中的一些字符串值序列化为整数

本文关键字:序列化 整数 字符串 Dictionary | 更新日期: 2023-09-27 18:19:03

目前我的Dictionary<string, string>序列化为:

{
    "Uri" : "/site/Default.aspx",
    "time-taken" : "232"
}

我希望json。net将它序列化为

{
    "Uri" : "/site/Default.aspx",
    "time-taken" : 232
}

用Json.net实现这个最简单的方法是什么?我不想创建一个具有正确类型的新类,而不是Dictionary,因为键很多而且可能会更改。我知道键是int

将Dictionary中的一些字符串值序列化为整数

我想我会做一个助手方法,将数据从字典复制到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"
}

小提琴:https://dotnetfiddle.net/xdnnb0