как назначить переменную в json в restrequest c# - PullRequest
0 голосов
/ 19 февраля 2020

Вот мой код. Все работает нормально, когда я жестко кодирую атрибут сообщения в json. Я хочу назначить переменную в атрибуте 'message' json.

var client = new RestClient("172.16.255.254:2016/settings");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\r\n\r\n\"_id\": 
\"98e8d3cd47fad6ce8e3f7b8d42cb4d9b\",\r\n\r\n\"_type\": 
\"SetRealtimeMessage\" ,\r\n\r\n\"message\": \"c3BlZWQgZXhjZWVkZWQh\", 
\r\n\"width\":240,\r\n\"fontBackground\":0,\r\n\"fontColor\": 
0xFFFFBF00,\r\n//\"fontColor\": 0XFFBF00,\r\n\"fontSize\": 
24,\r\n\r\n\"lineSpace\": 0,\r\n\r\n\"left\": 0, 
\r\n\r\n\"windowBackground\": 0, \r\n\r\n\"verticalPos\": 0, 
\r\n\r\n\"horizontalPos\": 0, \r\n\r\n\r\n\"showType\": 0, \r\n\"speed\": 20, 
\r\n\r\n\"moveCount\": 1,\r\n\r\n\r\n\"residenceTime\": -1\r\n\r\n}",  
ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);

Ответы [ 4 ]

3 голосов
/ 19 февраля 2020

Чтобы избежать записи длинной строки JSON вручную, вы можете использовать вездесущий пакет Newtonsoft. Json NuGet для создания строки JSON из объекта.

using System;
using Newtonsoft.Json;

public class Program
{
    public static void Main()
    {
        var message = "Hello, World!";

        string json = JsonConvert.SerializeObject(new 
        {
            id = 123,
            message = message
        });

        Console.WriteLine(json);

        // {"id":123,"message":"Hello, World!"}
    }       
}

DEMO: https://dotnetfiddle.net/FPFrng

Вы можете передать любой объект, я просто создаю здесь анонимный объект для простой демонстрации.

1 голос
/ 19 февраля 2020

Используйте JSON. NET, сериализуйте в json ваш объект и отправьте его.

var myVariable = ...

string message = JsonConvert.SerializeObject(myVariable);
request.AddParameter("application/json", message);
0 голосов
/ 19 февраля 2020

Короткий и безобразный ответ:

Вы можете объединить свою строку JSON вместе с вашей переменной, такой как

var MyValue = "bar";
var json = "{\"foo\":\"" + MyValue + "\"}"; // {"foo":"bar"}

Длинный и лучший (ИМХО) путь

Не пишите напрямую JSON строк! Вы замечаете, насколько это нечитабельно? Вместо этого вы можете создавать анонимные объекты и сериализовать их, используя, например, json. net:

var MyValue = "bar";
var MyObject = new
{
    foo = MyValue
};
// using Newtonsoft.Json; // <--- taken from the nugget package newtonsoft.json
var json = JsonConvert.SerializeObject(MyObject, Formatting.Indented);
Console.WriteLine(json);

Это приводит к выводу:

{
  "foo": "bar"
}
0 голосов
/ 19 февраля 2020

Вы можете использовать string.Format ()

request.AddParameter("application/json", string.Format("{\r\n\r\n\"_id\": 
\"98e8d3cd47fad6ce8e3f7b8d42cb4d9b\",\r\n\r\n\"_type\": 
\"SetRealtimeMessage\" ,\r\n\r\n\"message\": \"{0}\", 
\r\n\"width\":240,\r\n\"fontBackground\":0,\r\n\"fontColor\": 
0xFFFFBF00,\r\n//\"fontColor\": 0XFFBF00,\r\n\"fontSize\": 
24,\r\n\r\n\"lineSpace\": 0,\r\n\r\n\"left\": 0, 
\r\n\r\n\"windowBackground\": 0, \r\n\r\n\"verticalPos\": 0, 
\r\n\r\n\"horizontalPos\": 0, \r\n\r\n\r\n\"showType\": 0, \r\n\"speed\": 20, 
\r\n\r\n\"moveCount\": 1,\r\n\r\n\r\n\"residenceTime\": -1\r\n\r\n}",messageVar)
...