Создайте JSON, используя C # - PullRequest
       4

Создайте JSON, используя C #

0 голосов
/ 04 февраля 2019

Я создаю тело JSON для метода POST для моего вызова конечной точки Odata, как показано ниже

 Newtonsoft.Json.Linq.JObject sample;
sample = new Newtonsoft.Json.Linq.JObject();

sample["status"] = "New";
sample[ "PROJECT@odata.bind"] = "["+"/PROJECT('" + prjBarcode + "')"+"]";

Где PROJECT@odata.bind - это массив.Я смотрю, что JSON будет построен как

 "status": "New",
 "PROJECT@odata.bind":["/PROJECT('PJ1')"]

Но с моим кодом выше он генерирует как

  "PROJECT@odata.bind":"[/PROJECT('PJ1')]"

Где [] входит в "" какможно это исправить

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

В JSON квадратные скобки ([...]) обозначают массив, поэтому вам необходимо создать его, например:

var array = new Newtonsoft.Json.Linq.JArray(new string[] {"/PROJECT('" + prjBarcode + "')" });
sample["PROJECT@odata.bind"] = array;

Также следует рассмотреть возможность использования интерполированных строк ,это делает ваш код более читабельным:

var array = new Newtonsoft.Json.Linq.JArray(new string[] {"/PROJECT('{prjBarcode}')" });

Хотя я бы не стал создавать JSON таким образом.Вы должны создать конкретный тип, чтобы он соответствовал вашей структуре, и сериализовать его.Например:

public class Data
{
    public string Status { get; set; }
    [JsonProperty("PROJECT@odata.bind")]
    public string[] Projects { get; set; }
}

var json = JsonConvert.SerializeObject(new Data
{ 
    Status = "New", 
    Projects = new string[] {$"/PROJECT('{prjBarcode}')" } 
});
0 голосов
/ 04 февраля 2019

Вы передаете строковое значение для ключа PROJECT@odata.bind, и вам просто нужно передать массив

sample[ "PROJECT@odata.bind"] =  new JArray(new []{ "/PROJECT('" + prjBarcode + "')" });

или вы можете использовать другую перегрузку JArray конструктор

sample[ "PROJECT@odata.bind"] =  new JArray("/PROJECT('" + prjBarcode + "')");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...