为什么JSON序列化会返回部分反序列化的对象?

Mar*_*cus 0 c# serialization json converter json.net

我有这个方法:

public Specification RequestUnit(string jsonString)
{
    var obj = JsonConvert.DeserializeObject<SkuModel>(jsonString.Replace("on", "1"));
    return inteService.RequestSpecification(obj);
}
Run Code Online (Sandbox Code Playgroud)

而且,这是我的JSON,正是jsonString中包含的内容

{
"RequestStatus":"on",
"IsActive":"on",
"Code":"g87",
"Name":"fg8907",
"UnitDescription":"8gf"
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,由于某些未知原因,obj变量只是部分设置.除UnitDescription(保持为null)之外的所有参数都已成功反序列化.我正在使用Newtonsoft.Json JsonConvert类.

任何人?

Eld*_*iev 5

这个问题的原因是这样的:

jsonString.Replace("on", "1")
Run Code Online (Sandbox Code Playgroud)

Replace()方法将取代每个"开"的出现.所以,你的实际JSON将是这样的:

{
    "RequestStatus":"1",
    "IsActive":"1",
    "Code":"g87",
    "Name":"fg8907",
    "UnitDescripti1":"8gf"
}
Run Code Online (Sandbox Code Playgroud)

注意UnitDescripti1名称.

解决方法将使用

jsonString.Replace("\"on\"", "\"1\"")
Run Code Online (Sandbox Code Playgroud)

但最好配置反序列化过程或使用自定义JsonConverter,因为您可以再次遇到相同的问题.