2017-01-04 11 views
-2

これはわかりません。 JsonConvert.SerializeObject(item)で既に試してみましたが、私も変な文字列を取得しました。この種類のjson文字列の解析 "{" value ":[" 18 "]}"

この文字列化された文字列から値を除外するにはどうすればよいですか?

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

編集これ、私はそれを文字列化どこで

@:

https://gyazo.com/b9a6f212345b854796af3d80e4169a23

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

、ここでは、私がモデルから何を得るの出力である>小道具リスト@deserializing

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

はなぜあなたのJSONを使用すると、デシリアライズする前にその文字列を置き換えるとどうなる?。文字列 – NicoRiff

+1

からあなたはより多くのコンテキストを提供する必要があるとしていることを削除してください。あなたがいることを見ている何\」文字を?。持っていません文字列?ファイル内?C#ソースコード内?Visual Studioデバッガ内 –

+0

エスケープは、JSON文字列String内にあります。したがって引用符をエスケープする必要があります –

答えて

1

JSONが二重シリアル化されている、つまりオブジェクトがJSONにシリアル化されていて、その文字列がからにシリアル化されているように見えます。この誤りをasp.net-web-apiでどうやって簡単に作ることができるかの例は、JSON.NET Parser seems to be double serializing my objectsを参照してください。

問題を解決する最善の方法は、まず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; } 
}