Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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# .net Core 3.1 Newtonsoft.Json转换字典<;int,string>;字符串键_C#_Json_.net Core_Json.net - Fatal编程技术网

C# .net Core 3.1 Newtonsoft.Json转换字典<;int,string>;字符串键

C# .net Core 3.1 Newtonsoft.Json转换字典<;int,string>;字符串键,c#,json,.net-core,json.net,C#,Json,.net Core,Json.net,我的自定义对象的属性之一是dictionary,我需要将整个对象转换为json字符串,但JsonConvert将dictionary键从Int更改为string,这是我不希望发生的 var test = new Dictionary<int, string> { [1] = "2" }; var jsonDictionary = JsonConvert.SerializeObject(test, Formatting.None); // output {"1":"2"}

我的自定义对象的属性之一是dictionary,我需要将整个对象转换为json字符串,但JsonConvert将dictionary键从Int更改为string,这是我不希望发生的

var test = new Dictionary<int, string>
{
    [1] = "2"
};

var jsonDictionary = JsonConvert.SerializeObject(test, Formatting.None);

// output {"1":"2"}
var测试=新字典
{
[1] = "2"
};
var jsonDictionary=JsonConvert.SerializeObject(test,Formatting.None);
//输出{“1”:“2”}

我想要的输出应该是
{1:“2”}

我希望这可能会让事情变得明朗一点,并希望它能有所帮助!当我们调用Json.SerializeObject时,我们说的是“将我的对象转换为字符串表示,以便(例如)通过HTTP传输我的对象”

但是,当您反序列化字符串表示时,所有内容都返回到原始类型。这并不是说你可以“避免转换”,但是Json会自动进行转换,所以我们不必这样做

一个你可以考虑尝试的事情,它会给你很好的控制这个过程,就是做一个自定义类,比如:

class CustomDictionary : Dictionary<int, string> { }
class自定义字典:字典{}
然后,“往返”序列化/反序列化将您带回一个对象,其中键实际上是int,只有值是字符串:

    static void Main(string[] args)
    {
        CustomDictionary myDict = new CustomDictionary();
        myDict[1] = "Two";
        string stringRepresentation = JsonConvert.SerializeObject(myDict);
        Console.WriteLine(stringRepresentation); // looks like {"1":"Two"}

        // Now it's back to normal Dictionary<int, string>
        CustomDictionary deserializedDict = JsonConvert.DeserializeObject<CustomDictionary>(stringRepresentation);
    }
static void Main(字符串[]args)
{
CustomDictionary myDict=新建CustomDictionary();
myDict[1]=“两个”;
string stringRepresentation=JsonConvert.SerializeObject(myDict);
Console.WriteLine(stringRepresentation);//看起来像{“1”:“Two”}
//现在又回到了正常的字典
CustomDictionary deserializedDict=JsonConvert.DeserializeObject(stringRepresentation);
}

JSON不支持整数键。但如果我使用KeyValuPair,那么它就可以工作了?@Haytam有解决方案吗?如何解决?我的意思是我应该使用字符串键并在后端转换为int吗?没有解决方案,您的键需要是字符串才能使JSON有效并“可解析”。为什么需要将键设置为整数?解决方案是使用具有数字索引的数组(例如,
[,“2”]
),或者处理字符串。真正的问题是您收到的输出是否可以反序列化为您期望的类型。换句话说,
JsonConvert.DeserializeObject(jsonDictionary)
有效吗?我很高兴看到这么好的解释!谢谢很高兴我能帮忙!