json 如何在反序列化过程中删除动态类型的属性中的“双大括号{{}}”(ASp.Net Core MVC)

vs3odd8k  于 2022-12-01  发布在  .NET
关注(0)|答案(2)|浏览(175)

当反序列化一个字符串时,大括号是重复的,这干扰了一些字段的读取。我已经尝试了所有的方法,但是我不能正确地序列化,没有重复的大括号。
我已经试过这样做了:

dynamic values = JsonConvert.DeserializeObject<dynamic>(storedEvent.Data);

storedEvent.data属性的类型为字符串,它包含以下信息:

"{\"PaisId\":31,\"PaisDivisaoAdministrativaNivelRemovedEventList\":[{\"Id\":6,\"PaisId\":31,\"PaisNomePtBr\":\"\",\"PaisDivisaoAdministrativaTipoId\":5,\"PaisDivisaoAdministrativaTipoNome\":\"Município\",\"PaisDivisaoAdministrativaTipoOrigemId\":5,\"Timestamp\":\"2022-11-24T20:16:15.6020289-03:00\",\"MessageType\":\"PaisDivisaoAdministrativaNivelRemovedEvent\",\"AggregateId\":6},{\"Id\":5,\"PaisId\":31,\"PaisNomePtBr\":\"\",\"PaisDivisaoAdministrativaTipoId\":1,\"PaisDivisaoAdministrativaTipoNome\":\"Estado\",\"PaisDivisaoAdministrativaTipoOrigemId\":null,\"Timestamp\":\"2022-11-24T20:16:15.6580242-03:00\",\"MessageType\":\"PaisDivisaoAdministrativaNivelRemovedEvent\",\"AggregateId\":5}],\"Timestamp\":\"2022-11-24T20:16:16.1892039-03:00\",\"MessageType\":\"PaisDivisaoAdministrativaNivelHierarquiasRemovedEvent\",\"AggregateId\":31}"

获得的结果(重复的大括号):

{{
  "PaisId": 31,
  "PaisDivisaoAdministrativaNivelRemovedEventList": [
    {
      "Id": 6,
      "PaisId": 31,
      "PaisNomePtBr": "",
      "PaisDivisaoAdministrativaTipoId": 5,
      "PaisDivisaoAdministrativaTipoNome": "Município",
      "PaisDivisaoAdministrativaTipoOrigemId": 5,
      "Timestamp": "2022-11-24T20:16:15.6020289-03:00",
      "MessageType": "PaisDivisaoAdministrativaNivelRemovedEvent",
      "AggregateId": 6
    },
    {
      "Id": 5,
      "PaisId": 31,
      "PaisNomePtBr": "",
      "PaisDivisaoAdministrativaTipoId": 1,
      "PaisDivisaoAdministrativaTipoNome": "Estado",
      "PaisDivisaoAdministrativaTipoOrigemId": null,
      "Timestamp": "2022-11-24T20:16:15.6580242-03:00",
      "MessageType": "PaisDivisaoAdministrativaNivelRemovedEvent",
      "AggregateId": 5
    }
  ],
  "Timestamp": "2022-11-24T20:16:16.1892039-03:00",
  "MessageType": "PaisDivisaoAdministrativaNivelHierarquiasRemovedEvent",
  "AggregateId": 31
}}

预期值:

{
  "PaisId": 31,
  "PaisDivisaoAdministrativaNivelRemovedEventList": [
    {
      "Id": 6,
      "PaisId": 31,
      "PaisNomePtBr": "",
      "PaisDivisaoAdministrativaTipoId": 5,
      "PaisDivisaoAdministrativaTipoNome": "Município",
      "PaisDivisaoAdministrativaTipoOrigemId": 5,
      "Timestamp": "2022-11-24T20:16:15.6020289-03:00",
      "MessageType": "PaisDivisaoAdministrativaNivelRemovedEvent",
      "AggregateId": 6
    },
    {
      "Id": 5,
      "PaisId": 31,
      "PaisNomePtBr": "",
      "PaisDivisaoAdministrativaTipoId": 1,
      "PaisDivisaoAdministrativaTipoNome": "Estado",
      "PaisDivisaoAdministrativaTipoOrigemId": null,
      "Timestamp": "2022-11-24T20:16:15.6580242-03:00",
      "MessageType": "PaisDivisaoAdministrativaNivelRemovedEvent",
      "AggregateId": 5
    }
  ],
  "Timestamp": "2022-11-24T20:16:16.1892039-03:00",
  "MessageType": "PaisDivisaoAdministrativaNivelHierarquiasRemovedEvent",
  "AggregateId": 31
}

有人知道解决办法吗?

nzk0hqpo

nzk0hqpo1#

使用dynamic不是动态使用Json objects的好方法。为此,可以按如下方式使用Jobject

using Newtonsoft.Json.Linq;


string jsonStr= "{\"PaisId\":31,\"PaisDivisaoAdministrativaNivelRemovedEventList\":[{\"Id\":6,\"PaisId\":31,\"PaisNomePtBr\":\"\",\"PaisDivisaoAdministrativaTipoId\":5,\"PaisDivisaoAdministrativaTipoNome\":\"Município\",\"PaisDivisaoAdministrativaTipoOrigemId\":5,\"Timestamp\":\"2022-11-24T20:16:15.6020289-03:00\",\"MessageType\":\"PaisDivisaoAdministrativaNivelRemovedEvent\",\"AggregateId\":6},{\"Id\":5,\"PaisId\":31,\"PaisNomePtBr\":\"\",\"PaisDivisaoAdministrativaTipoId\":1,\"PaisDivisaoAdministrativaTipoNome\":\"Estado\",\"PaisDivisaoAdministrativaTipoOrigemId\":null,\"Timestamp\":\"2022-11-24T20:16:15.6580242-03:00\",\"MessageType\":\"PaisDivisaoAdministrativaNivelRemovedEvent\",\"AggregateId\":5}],\"Timestamp\":\"2022-11-24T20:16:16.1892039-03:00\",\"MessageType\":\"PaisDivisaoAdministrativaNivelHierarquiasRemovedEvent\",\"AggregateId\":31}";

var obj = JObject.Parse(jsonStr);

//access properties
var paisId = obj["PaisId"];

//Access to PaisDivisaoAdministrativaNivelRemovedEventList
var paisList = obj["PaisDivisaoAdministrativaNivelRemovedEventList"].ToList();

//search on PaisDivisaoAdministrativaNivelRemovedEventList
var result = paisList.FirstOrDefault(x => (int)x["Id"] == 6);
a64a0gku

a64a0gku2#

你必须修复返回双大括号字符串的代码。如果你没有访问这段代码的权限,摆脱双大括号的唯一方法是使用字符串函数

storedEvent.Data=storedEvent.Data.Substring(1,Data.Length-2);

在这之后,如果你喜欢的话,你可以使用你的代码,但是我不喜欢动态的,恕我直言,最好使用Parse和sqware brackets来获取数据。

相关问题