首页 > 解决方案 > 删除外括号并用数字命名对象?

问题描述

我对 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();
                }

通过谷歌和stackoverflow搜索没有运气。任何线索或帮助将不胜感激。

谢谢你。

标签: c#.netjsonserializationjson.net

解决方案


要获得第一个 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 key to store value,这是一个好方法吗?为什么。


推荐阅读