C# .net Core 3.1 Newtonsoft.Json转换字典<;int,string>;字符串键
我的自定义对象的属性之一是dictionary,我需要将整个对象转换为json字符串,但JsonConvert将dictionary键从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"}
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)
有效吗?我很高兴看到这么好的解释!谢谢很高兴我能帮忙!