2017-10-06 66 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。