使用不带引号的十六进制值反序列化 JSON
Deserialize JSON with Unquoted Hexadecimal Values
有没有办法将某些 JSON 反序列化为 JSON 包含未加引号的十六进制值的 DTO?我正在使用 JsonConvert.DeserializeObject
.
这是我需要反序列化的JSON。它是由设备生成的,我无法控制它:
{"ID":7,"T":1511819861,"E":777, "ET":2,"DEVID":f525873c,"DEVTS":1511801849}
问题出在字段 "DEVID"。
我知道这个 JSON 被认为是无效的,但我需要找到一种方法来处理它。有什么方法可以配置或转换该字段吗?
由于您无权修复响应,我建议您在反序列化之前修复 json。我做了这个功能,可能会给你提示如何解决你的问题:
public static string FixJson(string json, string property) {
var index = json.IndexOf(property);
var indexColon = json.IndexOf(':', index + 1);
var indexComma = json.IndexOf(',', index + 1);
var val = json.Substring(indexColon + 1, indexComma - indexColon - 1);
var replace = string.Format("'{0}': {1}", property, val.Trim());
var forR = string.Format("'{0}': '{1}'", property, val.Trim());
return json.Replace(replace, forR);
}
你不能在
上测试它
有没有办法将某些 JSON 反序列化为 JSON 包含未加引号的十六进制值的 DTO?我正在使用 JsonConvert.DeserializeObject
.
这是我需要反序列化的JSON。它是由设备生成的,我无法控制它:
{"ID":7,"T":1511819861,"E":777, "ET":2,"DEVID":f525873c,"DEVTS":1511801849}
问题出在字段 "DEVID"。
我知道这个 JSON 被认为是无效的,但我需要找到一种方法来处理它。有什么方法可以配置或转换该字段吗?
由于您无权修复响应,我建议您在反序列化之前修复 json。我做了这个功能,可能会给你提示如何解决你的问题:
public static string FixJson(string json, string property) {
var index = json.IndexOf(property);
var indexColon = json.IndexOf(':', index + 1);
var indexComma = json.IndexOf(',', index + 1);
var val = json.Substring(indexColon + 1, indexComma - indexColon - 1);
var replace = string.Format("'{0}': {1}", property, val.Trim());
var forR = string.Format("'{0}': '{1}'", property, val.Trim());
return json.Replace(replace, forR);
}
你不能在
上测试它