2017-10-06 62 views
1

我有一個JSON代碼要求的一些信息到一個API,請參閱下面的代碼更改JSON請求的一部分具有可變內容

string json = "{ \"amount\" : \"0.5\", \"withdrawal\" : \"...\", \"pair\" : \"eth_xmr\" }"; 

事實上,我希望替換「0.5」信息給我從一些數學計算類中獲得可變內容。

我嘗試了一些東西,但我無法使它工作(每次都有紅線)。

如何將該「0.5」部分替換爲字符串變量?

編輯:

下面是完整的呼叫代碼:

var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr); 
      httpWebRequest.ContentType = "application/json; charset=utf-8"; 
      httpWebRequest.Method = "POST"; 

      using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
      { 
       string json = "{ \"amount\" : \"0.5\", \"withdrawal\" : \"...\", \"pair\" : \"eth_xmr\" }"; 

       streamWriter.Write(json); 
       streamWriter.Flush(); 
      } 
      var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
      using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
      { 
       var responseText = streamReader.ReadToEnd(); 
       var apiResponse = JsonConvert.DeserializeObject<ApiResponse>(responseText); 
+2

你爲什麼手工創建你的JSON?我會建議使用其中的一個JSON庫。 .NET的「默認」是JSON.NET。 – germi

+0

我正在使用JSON.NET將答案放入一些字符串變量。我只是用它來調用API – EduardLula

回答

0

使用Json.NET和轉換您的JSON字符串和操作量:

string json = "{ \"amount\" : \"0.5\", \"withdrawal\" : \"...\", \"pair\" : \"eth_xmr\" }"; 

dynamic lsDynObject = JsonConvert.DeserializeObject(json); 
lsDynObject.amount = 605.123; 
string lsOut = JsonConvert.SerializeObject(lsDynObject); 

Console.WriteLine(lsOut); 

安裝有:

安裝,包裝Newtonsoft.Json

但你必須考慮這個數量現在是一個數字。 如果繼續使用量作爲一個字符串,你必須設置:

lsDynObject.amount = "605.123"; 

更新:

使用一類是這樣的:

public class MyJson 
{ 
    [JsonProperty("pair")] 
    public string Pair { get; set; } 

    [JsonProperty("amount")] 
    public string Amount { get; set; } 

    [JsonProperty("withdrawal")] 
    public string Withdrawal { get; set; } 
} 

並與寫您的JSON:

streamWriter.Write(JsonConvert.SerializeObject(new MyJson() 
{ 
    Pair = "eth_xmr", 
    Withdrawal = "...", 
    Amount = "34.676" 
})); 
+0

你的代碼正在工作,但我無法使用我的變量。任何想法爲什麼? – EduardLula

+0

你的'amout'變量可能是一個數字。將其轉換爲字符串或將'MyJson.Amout'更改爲您的號碼類型。但是,如果您更改爲數字類型,則引號在您的json字符串中丟失。 – PinBack

+0

它實際上是一個字符串,但我不能讓它在金額線上工作,我不知道爲什麼。它在文本框中工作,但不在JSON請求中。 – EduardLula

0

這應該工作:

double amount = 0.75; 
string json = $"{{ \"amount\" : \"{amount}\", \"withdrawal\" : \"...\", \"pair\" : \"eth_xmr\" }}"; 

不要在字符串前面忘了$。然後,你可以訪問任何變量/場/ ......在大括號內{}

編輯:你有當你已經在使用JSON使用在開始{{}}最終逃脫括號

+0

不起作用。 Uncaught SyntaxError –

+0

@TavishAggarwal它的工作原理。你有一個語法錯誤。你真的因此而低估了嗎? – Zimano

+0

我havnt downvoted,但不工作 –

0

.NET,你不應該手工創建你的請求。相反,撰寫你的JSON對象是這樣的:

JObject json = new JObject(); 
json.Add("amount", YourCalculation()); 
// add your other properties the same way ... 

如果你真的需要這個對象爲string,你可以在最後調用它ToString

0

雖然你當然可以操縱字符串來創建json,但最好的方法是讓所有這些字段都有一個模型(類),將值設置爲模型,然後在調用api之前將其序列化爲json。