Преобразование JSON из одной структуры в другую - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть сценарий, который я пытаюсь обдумать. У меня есть JSON, который меня больше всего не интересует, за исключением определенных значений. Я просто хочу извлечь эти значения и добавить их в новый объект.

Вот JSON, с которого я начинаю:

{
  "name": "Codex JJ",
  "component": {
    "Profile-1": {
      "id": "Profile",
      "type": "Person",
      "attributes": {
                "Hair-color": "blue",
      "Eye-color": "brown",
        "hair-color": "brown",
        "height": "170cm"
      },
      "status": {
        "employed": "true",
        "ethnic": "White"
      }
    },
    "Profile-2": {
      "id": "Profile",
      "type": "Person",
      "attributes": {
                "Hair-color": "blue",
      "Eye-color": "brown",
        "hair-color": "brown",
        "height": "170cm"
      },
      "status": {
        "employed": "true",
        "ethnic": "White"
      }
    }
  }
}

Я хочу перестроить его в этот JSON:

{
    "name": "NEW JSON"
    "company": [
        {
            "Person": "new-person",
            "attributes": {
                "Hair-color": "blue",
                "Eye-color": "brown",
                "employed": "true",
                "ethnic": "White"
            },
        {
            "Person": "new-person",
            "attributes": {
                "Hair-color": "blue",
                "Eye-color": "brown",
                "employed": "true",
                "ethnic": "White"
            },
        }
    ]
}

Какова была бы лучшая практика для реализации этого? Должен ли я использовать ключевое слово dynamic для десериализации моего входящего JSON? Как именно можно извлечь значения и добавить их в мои созданные объекты C #, чтобы создать совершенно новую структуру JSON?

1 Ответ

1 голос
/ 06 апреля 2019

Если вы просто хотите преобразовать JSON и вам не нужна (или вам не нужна) формальная объектная модель для представления данных, вы можете использовать Json.Net LINQ-to -JSON API (JObjects) для этого:

JObject obj = JObject.Parse(json);

JObject newObj = new JObject(
    new JProperty("name", obj["name"]),
    new JProperty("company", new JArray(
        obj["component"]
            .Children<JProperty>()
            .Select(jp => new JObject(
                    new JProperty((string)jp.Value["type"], jp.Name),
                    new JProperty("attributes", jp.Value["attributes"])
                )
            )
        )
    )
);

json = newObj.ToString();

Рабочая демоверсия: https://dotnetfiddle.net/zSWAL0

...