[英]C#: Converting Json Object to String using RestSharp:
下面是我使用 Python 請求編寫的 http 請求的工作示例。 在上述示例中,我使用 Json Dumps 函數將一個 json 對象轉換為字符串:
data = [
{"parameterName":"date",
"values":["-30d"]
},
{"parameterName":"category",
"values":["25","4","2"]
},
{"parameterName":"format",
"values":["pdf"]
},
{"parameterName":"readunread","values":["read"]}]
request = session.post(
someUrl,
headers={
'Host': someUrl,
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0',
'Accept': 'application/json, text/plain, */*',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate, br',
},
cookies=response.cookies,
data = json.dumps(data)
)
我想找到一種不必要的復雜方法來做這件事,因為 Python 太簡單了,首先想到的是 C#(使用 RestSharp):
var client = new RestSharp.RestClient();
client.BaseUrl = new Uri(someUrl);
var documents = new RestSharp.RestRequest(RestSharp.Method.POST);
documents.AddCookie("cookie",theCookies);
documents.AddHeader("Host",someHostUrl);
documents.AddHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0");
documents.AddHeader("Accept","application/json, text/plain, */*");
documents.AddHeader("Accept-Language", "en-US,en;q=0.5");
documents.AddHeader("Accept-Encoding", "gzip, deflate, br");
string documentsBody = "[{\"parameterName\":\"category\",\"values\":[\"25\",\"4\",\"2\"]},{\"parameterName\":\"format\",\"values\":[\"pdf\"]},{\"parameterName\":\"date\",\"values\":[\"-30d\"]},{\"parameterName\":\"readunread\",\"values\":[\"read\"]}]";
documents.AddBody(documentsBody);
IRestResponse response = client.Execute(documents);
Python 示例返回所需的響應。 C# 示例沒有。 我知道這是由於有效載荷的格式。 除了在 C# 中,格式化有效負載(如 Python 示例中所做的那樣)的最不令人討厭的方法是什么?
我們可以嘗試使用Json.NET
支持的JsonConvert.SerializeObject
來幫助我們輕松序列化或反序列化。
我們可以創建一個類,將您的參數數據表示為強類型。
public class ParameterModel
{
public string parameterName { get; set; }
public List<string> values { get; set; }
}
然后將其作為參數傳遞給JsonConvert.SerializeObject
string documentsBody = Newtonsoft.Json.JsonConvert.SerializeObject(new List<ParameterModel>{
new ParameterModel(){ parameterName = "category", values = new List<string>(){"25","4","2"} },
//....
});
documents.AddBody(documentsBody);
IRestResponse response = client.Execute(documents);
編輯
如果您不想為模型的參數創建一個類,我們可以嘗試使用匿名對象。
var result = Newtonsoft.Json.JsonConvert.SerializeObject(new []{
new { parameterName = "category", values = new []{"25","4","2"} },
//....
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.