Удаление объекта «Внешняя скобка» и «Наименование» с номером? - PullRequest
0 голосов
/ 14 апреля 2020

Я действительно запутался с json (я все еще изучаю json).

JSON Я хочу:

{  "entityMap": {
    "0": {
      "type": "LINK",
      "mutability": "MUTABLE",
      "data": {
        "url": "https://stackoverflow.com/"
      }
    },
    "1": {
      "type": "LINK",
      "mutability": "MUTABLE",
      "data": {
        "url": "https://stackoverflow.com/"
      }
    },
    "2": {
      "type": "LINK",
      "mutability": "MUTABLE",
      "data": {
        "url": "https://stackoverflow.com/"
      }
    },
    "3": {
      "type": "LINK",
      "mutability": "MUTABLE",
      "data": {
        "url": "https://stackoverflow.com/"
      }
    }
  }
}

Это считается плохим json? А как назвать json с таким номером?

Это, безусловно, то, что я получил.

{
    "entityMap": [
        {
            "type": "LINK",
            "mutability": "MUTABLE",
            "data": {
                "url": "https://stackoverflow.com/"
            }
        },
        {
            "type": "LINK",
            "mutability": "MUTABLE",
            "data": {
                "url": "https://stackoverflow.com/"
            }
        },
        {
            "type": "LINK",
            "mutability": "MUTABLE",
            "data": {
                "url": "https://stackoverflow.com/"
            }
        }
    ]
}

это мой класс

    public class editorRawTest
    {
        public List<entityMapItem> entityMap { get; set; }

    }


    public class entityMapItem
    {
        public string type { get; set; }
        public string mutability { get; set; }
        public entityMapItemData data { get; set; }
    }

    public class entityMapItemData
    {
        public string url { get; set; }

    }

мой код выполнения:

                var map = new List<entityMapItem>();

                var mapitem = new entityMapItem() { type = "LINK", mutability = "MUTABLE", data = new entityMapItemData() { url = "https://stackoverflow.com/" }  };

                map.Add(mapitem);
                map.Add(mapitem);
                map.Add(mapitem);



                editorRawTest bc = new editorRawTest() { entityMap = map };

                string JSONresult = JsonConvert.SerializeObject(bc);
                string path = @"jsonmapdata.json";
                using (var tw = new StreamWriter(path, true))
                {
                    tw.WriteLine(JSONresult.ToString());
                    tw.Close();
                }

Поиск в Google и stackoverflow без удачи. Будем благодарны за любые подсказки или помощь.

Спасибо.

1 Ответ

1 голос
/ 14 апреля 2020

Чтобы получить первый JSON, вам необходимо заменить List<entityMapItem> на Dictionary<string, entityMapItem>, например:

public class editorRawTest
{
    public Dictionary<string, entityMapItem> entityMap { get; set; }
}

Затем вам нужно будет заполнить его следующим образом:

var map = new Dictionary<string, entityMapItem>();

var mapitem = new entityMapItem() { type = "LINK", mutability = "MUTABLE", data = new entityMapItemData() { url = "https://stackoverflow.com/" }  };

for (int i = 0; i < 4; i++)
{
    map.Add(i.ToString(), mapitem);
}

Но я бы отговорил вас делать это, если вам не нужно. С тем, что у вас сейчас (второй JSON со списком), работать намного проще. Если у вас есть выбор между двумя, лучше выбрать второй подход. См. Использование json ключа для хранения значения, это хороший подход? почему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...