2017-08-14 15 views
-1

を使用してエスケープ文字を含む文字列をデシリアライズ:私は、既知の種類のリストにそれをデシリアライズしようとしている私はこのような文字列を持っているJsonConvert

"[ 
    { 
    \"SomeProperty\": 22 
    } 
]" 

を:

 string toProcess = [email protected]"[{text}]".Replace("\n", ","); 
     toProcess = Regex.Unescape(toProcess); 
     List<KnownType> objectList = JsonConvert.DeserializeObject<List<KnownType>>(toProcess); 

私がいることがわかりしかし、 \"文字を含む文字列を逆シリアル化しようとしていますが、それはCannot deserialize the current JSON objectで失敗しています。これを正しく非直列化するにはどうすればよいですか?

+0

あなたの文字列は有効なJSONではありません。だからあなたはそれをデシリアライズできません。これはhttps://jsonlint.com/で確認できます。さらに、有効なJSON文字列は、それを逆シリアル化する前に操作する必要はありません。したがって、私はあなたのアプローチが正しくないと思います。 – Christos

+1

あなたのjsonはまさにこのようなものですか、それともデバッガのウィンドウに表示されていますか? –

+0

@Christos私が使用している文字列は有効なJSONではありません。私はそれを有効なJSONにしようとしています。 – SB2055

答えて

-1

あなたは予想通り、このコードが動作するstring toProcess = [email protected]"[{text}]".Replace("\n", ",");

string text = @"[ 
    { 
    \""SomeProperty\"": 22 
    } 
]"; 


text = Regex.Unescape(text); 
var objectList = JsonConvert.DeserializeObject<List<KnownType>>(text); 

Console.WriteLine(objectList[0].SomeProperty);//22 

を必要としません。

+0

私は有効なJSON文字列を持っていません - 私は '\" 'を含めて私が修正している忌み嫌いがあります。また、コンマの代わりにインライン' \ n'を持っています - – SB2055

+0

@ SB2055 \ ""はリテラル文字列\ "に変換されるので、何を意味するのか分かりません。 –

関連する問題