Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字典中的某些字符串值序列化为整数_C#_.net_Json.net - Fatal编程技术网

C# 将字典中的某些字符串值序列化为整数

C# 将字典中的某些字符串值序列化为整数,c#,.net,json.net,C#,.net,Json.net,当前,我的词典序列化为: { "Uri" : "/site/Default.aspx", "time-taken" : "232" } 我希望Json.net将其序列化为 { "Uri" : "/site/Default.aspx", "time-taken" : 232 } 使用Json.net实现这一点最简单的方法是什么?我不想用正确的类型而不是字典创建一个新类,因为键很多,可能会改变。我知道将是int的键 我想我应该创建一个助手方法,将数据从字典复制到J

当前,我的
词典
序列化为:

{
    "Uri" : "/site/Default.aspx",
    "time-taken" : "232"
}
我希望Json.net将其序列化为

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

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

我想我应该创建一个助手方法,将数据从字典复制到
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);

Fiddle:

字典中的数字是本地化格式还是不变格式?如果不变,则应使用。
{
  "AnInt": 123,
  "AString": "abc",
  "AnotherInt": 456,
  "KeepThisAsString": "789",
  "NotAnInt": "xyz"
}