根据这里的一些解决方案,我选择使用NewtonSoft。但是我无法将JSON转换为类对象。我认为,传递给方法的json(或字符串)格式不正确。
上课:
public class EmailAPIResult
{
public string Status { get; set; }
}
方法:
//....code
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
string result = streamReader.ReadToEnd();
//when hovered on "result", the value is "\"{\\\"Status\\\":\\\"Success\\\"}\""
//For Text Visualizer, the value is "{\"Status\":\"Success\"}"
//And for JSON Visualizer, the value is [JSON]:"{"Status":"Success"}"
EmailAPIResult earesult = JsonConvert.DeserializeObject<EmailAPIResult>(result);
//ERROR : Error converting value "{"Status":"Success"}" to type 'EmailAPIResult'.
}
以下代码有效:
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
string good = "{\"Status\":\"Success\"}";
//when hovered on "good", the value is "{\"Status\":\"Success\"}"
//For Text Visualizer, the value is {"Status":"Success"}
//And for JSON Visualizer, the value is
// [JSON]
// Status:"Success"
EmailAPIResult earesult = JsonConvert.DeserializeObject<EmailAPIResult>(good); //successful
}
我应该如何格式化“结果”,以便我的代码能够正常工作。
答案 0 :(得分:1)
虽然这是真的,你可以修复你的字符串,就像m.rogalski建议的那样,我建议不来做。< / p>
正如你所说:
当徘徊在&#34;结果&#34;时,值为&#34; \&#34; {\\\&#34;状态\\\&#34;:\\\&#34 ;成功\\\&#34;} \&#34;&#34;
我建议检查它的来源。你的后端实现了什么?看起来好像HTTP回答的JSON结果实际上不是JSON,而是完全转义的JSON字符串。 如果你可以控制后端发生的事情,你应该真正解决它,因为每次尝试编写客户端到HTTP服务时,你都会遇到类似的问题。
无论如何, if 你想要快速修复,试试那个:
result = result.Replace(@"\\", @"\").Replace(@"\""", "\"").Trim('\"');
对Replace
的调用会将未转义的字符替换为未转义的字符。 Trim
修剪前导和尾随引号。
答案 1 :(得分:0)
正如您在问题中所示:
当悬停在“结果”上时,值为“\”{\\“状态\\”:\\“成功\\”} \“”
这意味着您的JSon字符串以转义的"
字符开头和结尾。
尝试摆脱这些(例如):
string result = streamReader.ReadToEnd();
result = result.Substring(1);
result = result.Substring(0, result.Length - 1);
这将为您提供类似"{\\\"Status\\\":\\\"Success\\\"}"
编辑:
我发布的结果无效(我的不好),因为它包含另一个未转义的字符\
。您可以使用string.Replace
方法摆脱这种情况:
result = result.Replace("\\", string.Empty);
但是这些替换的缺点是,如果你的Json包含这个字符,它将被替换为空(\0
)字符
// {"Status":"Some\Other status"}
// would become
// {"Status":"SomeOther status"}