如何将类似字符串的JSON转换为C#对象

时间:2017-03-01 06:38:41

标签: c# json

根据这里的一些解决方案,我选择使用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
    }

我应该如何格式化“结果”,以便我的代码能够正常工作。

2 个答案:

答案 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"}