Отформатируйте каждую запись списка с именем JSON - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь отформатировать объект List в JSON заданным c способом:

...

{
    "MyList": [
        "Entry": {
           "Id": "1000",
           "Name" : "Billy"
        }
    ]
}

...

Моя проблема в том, что я не могу получить имя свойства "Entry" для записи для каждого элемента в списке.

Вот мой C# код:

Entry.cs

[JsonObject(MemberSerialization.OptIn)]
    public class Entry
    {
        [JsonProperty]
        public string Id { get; set; }
        [JsonProperty]
        public string Name { get; set; }
    }

List.cs

[JsonObject(MemberSerialization.OptIn)]
    public class MyList
    {
        [JsonProperty]
        List<Entry> List = new List<Entry>();

        public void Add(Entry param) {
            List.Add(param);
        }
    }

TestController.cs

[HttpPost]
    public IHttpActionResult GrabarMarcacion([FromBody] JObject data)
    {
        MyList lst = new MyList();
        lst.Add(new Entry{Id="1000", Name="Billy"});
        return Ok(lst);
    }

Извините, я новичок в JSON и REST, возможно ли вообще делать то, что я спрашиваю? до сих пор я всегда получаю что-то вроде:

{
    "List": {
        {
            "ID": "1000",
            "Name" : "Billy"
        },
        {
                    "ID": "1001",
            "Name" : "Bob"
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Из того, что я понимаю, вы хотите Entry имя свойства для каждого элемента в списке. Самый простой способ сделать это - сделать Dictionary:

Переименованным Entry.cs в EntryModel.cs

[JsonObject(MemberSerialization.OptIn)]
public class EntryModel
{
    [JsonProperty]
    public Dictionary<string, string> Entry { get; set; }
}

В List.cs, измените свойство на MyList. Это требует изменения имени класса.

[JsonObject(MemberSerialization.OptIn)]
public class MyListModel
{
    [JsonProperty]
    public List<EntryModel> MyList { get; set; } = new List<EntryModel>();
}

Теперь в вашем TestController.cs вы можете использовать:

MyListModel lst = new MyListModel();
lst.MyList.Add(new EntryModel 
{
    Entry = new Dictionary<string, string> {
        { "Id", "1000" }, { "Name", "Billy" } }
});

lst.MyList.Add(new EntryModel
{
    Entry = new Dictionary<string, string> {
        { "Id", "3000" }, {"Name", "ABC" } }
});

Это дает следующее JSON:

{
  "MyList": [
    {
      "Entry": {
        "Id": "1000",
        "Name": "Billy"
      }
    },
    {
      "Entry": {
        "Id": "3000",
        "Name": "ABC"
      }
    }
  ]
}
0 голосов
/ 04 апреля 2020

Я никогда не использовал c#, но попробуйте для Entry.cs:

[JsonObject(MemberSerialization.OptIn)]
    public class Entry
  {
  [JsonProperty]
  public object Entry { get; set; }
    {
        [JsonProperty]
        public string Id { get; set; }
        [JsonProperty]
        public string Name { get; set; }
    }
  }
...