2017-01-04 63 views
-2

我只是无法弄清楚这一点。 已经用JsonConvert.SerializeObject(item)试过了,我也有一个奇怪的字符串。解析这种json字符串化的字符串“{”value “:[”18 “]}”

如何从这个字符串化的字符串中删除值?

"{\"value\":[\"18\"]}" 

编辑@

这是我字符串化它:

var data = new FormData(); 
    data.append('cates', JSON.stringify(toSend)); 

,这里是什么输出我从模型>道具列表

https://gyazo.com/b9a6f212345b854796af3d80e4169a23

@deserializing得到

 foreach (var item in data.cates) 
     { 
      var l = JsonConvert.DeserializeObject(item); 
     } 
+0

为什么你的JSON有\”字符?如果你反序列化之前更换该字符串发生?尝试移除从字符串 – NicoRiff

+1

你将需要提供更多的背景。你在哪里看到的那字符串?在文件中?在C#源代码中?在Visual Studio调试器中? –

+0

转义是因为JSON字符串在一个字符串中。因此,报价必须逃脱 –

回答

1

看起来好像你的JSON已经双串行化,即一个对象序列化到JSON,那么该字符串连载再次。请参阅JSON.NET Parser seems to be double serializing my objects了解如何使用asp.net-web-api轻松完成此错误的示例。

解决这个问题的最好方法是不要双重序列化开始的JSON。如果出于某种原因这不可能是固定的(例如因为双串行化JSON是从一些第三方服务,则不能修改退回),你总是可以反序列化的两倍,以及:

var json = @"""{\""value\"":[\""18\""]}"""; 

Console.WriteLine("JSON: "); 
Console.WriteLine(json); // Prints "{\"value\":[\"18\"]}" 

var intermediateJson = JsonConvert.DeserializeObject<string>(json); 
var root = JsonConvert.DeserializeObject<RootObject>(intermediateJson); 

Console.WriteLine("Reserialized root: "); 
Console.WriteLine(JsonConvert.SerializeObject(root)); // Prints {"value":["18"]} 
Console.WriteLine("value:"); 
Console.WriteLine(root.value.First()); // Prints 18 

使用,对于根对象:

public class RootObject 
{ 
    public List<string> value { get; set; } 
}