无效的JSON原语-自定义序列化/反序列化

斯里坎特(Srikanth Y.)

我有一个从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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring @RestController自定义JSON反序列化器

使用Gson的自定义JSON反序列化器

使用Jackson自定义JSON反序列化

在Java中使用Jackson进行JSON FIELD的自定义反序列化?

Go中接口的自定义JSON序列化和反序列化

如何为Jackson编写自定义JSON反序列化器?

如何在Jackson JSON(反序列化)中自定义序列化或转换具有自定义键类型的Map属性?

如何使用Json.Net使用自定义键对字典进行序列化/反序列化?

反序列化时无效的JSON原语

使用Json.NET自定义反序列化

使用Jackson自定义反序列化JSON字段

JSON.Net无法在自定义JsonConverter中反序列化JSON数组

在Newtonsoft.Json中反序列化自定义异常

如何在C#中反序列化自定义json

自定义JSON反序列化程序,用于格式错误的JSON

JSON反序列化修改后的类。自定义JSON反序列化方法

自定义JSON序列化/反序列化,以多种可能的格式读取属性

对Java中的自定义枚举值反序列化json响应

使用JsonConverter在C#中自定义JSON反序列化

使用System.Text.Json进行自定义反序列化

使用Jackson的自定义JSON序列化/反序列化

Jackson JSON无法使用自定义根名称反序列化元素数组?

自定义JSON.net序列化和反序列化

Jackson中的自定义JSON反序列化,排除invalide数组

自定义JSON序列化和反序列化

Jackson-仅将自定义反序列化器用于特定的JSON

使用自定义转换器从流中反序列化Json

Ktor自定义json对象反序列化

Newtonsoft JSON - 如何反序列化自定义集合?