2017-08-14 44 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 \“”翻译成文字字符串\“,所以我不确定你的意思。 –