我有这个方法:
public Specification RequestUnit(string jsonString)
{
var obj = JsonConvert.DeserializeObject<SkuModel>(jsonString.Replace("on", "1"));
return inteService.RequestSpecification(obj);
}
而且,这是我的JSON,完全 jsonString
中包含的内容{
"RequestStatus":"on",
"IsActive":"on",
"Code":"g87",
"Name":"fg8907",
"UnitDescription":"8gf"
}
不幸的是,由于某些未知原因, obj 变量仅部分设置。除 UnitDescription (保持为null)之外的所有参数都已成功反序列化。我正在使用Newtonsoft.Json JsonConvert类。
任何人
答案 0 :(得分:5)
这个问题的原因是:
jsonString.Replace("on", "1")
Replace()
方法将取代&#34; on&#34;的每一次出现。所以,你的实际JSON将是这样的:
{
"RequestStatus":"1",
"IsActive":"1",
"Code":"g87",
"Name":"fg8907",
"UnitDescripti1":"8gf"
}
注意UnitDescripti1
名称。
解决方法将使用
jsonString.Replace("\"on\"", "\"1\"")
但是,配置反序列化过程或使用自定义JsonConverter会更好,因为您可以再次遇到相同的问题。
答案 1 :(得分:2)
作为@Eldar mentions,您可以为JsonConverter
值使用自定义bool
。这样做可能比尝试替换JSON字符串中的某些值更安全。
public class BooleanOnOffConverter : JsonConverter
{
public override void WriteJson(
JsonWriter writer,
object value,
JsonSerializer serializer)
{
writer.WriteValue((bool)value ? "on" : "off");
}
public override object ReadJson(
JsonReader reader,
Type objectType,
object existingValue,
JsonSerializer serializer)
{
return reader.Value.ToString() == "on";
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(bool);
}
}
用法:
SkuModel deserialized =
JsonConvert.DeserializeObject<SkuModel>(jsonString, new BooleanOnOffConverter());