无效 JSON 原语 - 自定义 Serialization/Deserialization

Invalid JSON Primitive - Custom Serialization/Deserialization

我有一个从网络服务返回的 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 对象反序列化为结构化数据表。

我需要自定义 serialization/deserialization 吗?

非常感谢不使用 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