当我序列化任何内部有int字段的类时,当它的值为0时,它将其序列化为string而不是int。
我有课:
[Serializable]
public class ResourceData
{
public int Amount;
public string Key;
}
当我使用Newtonsoft.Json将其序列化为json字符串时,
jsonSettings = new JsonSerializerSettings
{
DefaultValueHandling = DefaultValueHandling.Include,
};
var resourceData = new ResourceData();
string jsonString = JsonConvert.SerializeObject(resourceData, jsonSettings);
jsonString看起来像这样:
{
"Amount": "0", // Instead of {"Amount": 0} I got {"Amount": "0"}. String instead of int
"Key": ""
}
但它只发生在int值为零的情况下,如果它是除零之外的任何值,它将正确序列化。举例来说:
jsonSettings = new JsonSerializerSettings
{
DefaultValueHandling = DefaultValueHandling.Include,
};
var resourceData = new ResourceData();
resourceData.Amount = 5;
string jsonString = JsonConvert.SerializeObject(resourceData, jsonSettings);
// jsonString contains:
{
"Amount": 5,
"Key": ""
}
我需要Amount
总是序列化为int,而不是string。
先谢谢你了。
1条答案
按热度按时间yh2wf1be1#
你得到了一个奇怪的结果,这是不可能的。当我测试你的代码时,
Newtonsoft文档:“DefaultValueHandling.Include -包括成员值与序列化对象时成员的默认值相同的成员。包含的成员被写入JSON。没有任何效果。”
它与更改属性值无关,它只在序列化过程中包含或不包含整个属性INTO JSON STRING。
因此,如果您选择DefaultValueHandling.Ignore,
对于第一种情况,
for resourceData.Amount = 5;
为了让另一个选项有更稳定的结果,我高度推荐你在你的类中添加getter/setter