我有一个从Web服务返回的JSON文件。
facilityName: Ragley DRI01{
"DataCenterManager": {
"first": "",
"second": "Cory Kemp"
},
"RegionalDataCenterManager": {
"first": "",
"second": "John Farrell"
},
"LastUpdatedBy": {
"first": "DCInfoSyncRole",
"second": "v-asalam"
},
"Client": {
"first": "DCInfoSyncRole",
"second": "FacilityMasterPortal"
}
}
facilityName: Quitman, MEI01{
"DataCenterManager": {
"first": "",
"second": "Cory Kemp"
},
"RegionalDataCenterManager": {
"first": "",
"second": "John Farrell"
},
"LastUpdatedBy": {
"first": "DCInfoSyncRole",
"second": "v-asalam"
},
"Client": {
"first": "DCInfoSyncRole",
"second": "FacilityMasterPortal"
}
}
我知道根据JSONLint无效,但是我必须将此JSON对象反序列化为结构化DataTable。
我需要自定义序列化/反序列化吗?
最好不使用JSON.net的任何帮助。
恐怕您面对的可怕格式与真正的JSON足够远,JSON解析器无法对其进行调整以解析它。最好的办法是手动将其转换为有效的JSON,然后像往常一样进行解析。
当然,这很容易出错,而且很脆弱,但是如果您确实需要这样做,那是可能的。这样的事情会作为开始
var resultBuilder = new StringBuilder();
resultBuilder.Append("[");
var facilityNameRegex = new Regex("facilityName: ((.)+(?={))");
var facilities = facilityNameRegex.Matches(text);
var lastIndex = facilities.Count - 1;
for (int i = 0; i <= lastIndex; i++)
{
var facilityName = facilities[i].Groups[1].Value;
var bodyStartIndex = facilities[i].Index + facilities[i].Length;
var body = (i < lastIndex) ?
text.Substring(bodyStartIndex, facilities[i + 1].Index - bodyStartIndex)
: text.Substring(bodyStartIndex);
resultBuilder.AppendFormat("{{\"facilityName\": {0}, \"settings\": {1}}}",
HttpUtility.JavaScriptStringEncode(facilityName, addDoubleQuotes: true),
body);
if (i != lastIndex)
{
resultBuilder.Append(",");
}
}
resultBuilder.Append("]");
Console.WriteLine(resultBuilder.ToString()); // result is a valid JSON array
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句