我正在尝试反序列化JSON字符串,但是我收到错误:
var response = jss.Deserialize<Dictionary<string,string>>(responseValue);
我收到了一个错误:
键入&#39; System.String&#39;不支持反序列化数组。
我认为如果我使用\"
'
,错误将会得到修复
这是字符串
&#34; {\&#34;数据\&#34;:[],\&#34;错误\&#34;:1,\&#34; ERROR_MSG \&#34;:\ &#34;找不到关联的 数据库\&#34;,\&#34;消息\&#34;:\&#34;请检查sr_no您已发送\&#34;}&#34;
我想要这样
&#34; {&#39;数据&#39;:[],&#39;错误&#39;:1,&#39; error_msg&#39;:&#39;找不到关联 数据库&#39;,&#39;消息&#39;:&#39;请检查sr_no您已发送&#39;}&#34;
我尝试使用以下功能,但对我不起作用
responseValue.Replace("\"","'");
答案 0 :(得分:4)
如果您希望更改同一变量,则需要使用返回的结果再次设置它。
responseValue = responseValue.Replace(@"\"","'");
答案 1 :(得分:0)
试试这个:
String s = "{\"data\":[],\"error\":1,\"error_msg\":\"could not find associated database\",\"message\":\"Please check sr_no that you have sent\"}";
s= s.Replace("\"", "'");
答案 2 :(得分:0)
string responseValue = "{\"data\":[],\"error\":1,\"error_msg\":\"could not find associated database\",\"message\":\"Please check sr_no that you have sent\"}";
Console.WriteLine(responseValue.Replace("\"", "'"));
如果要返回此值,则将其保存在变量中并返回该变量。希望我的回答能帮到你。如果有任何评论如下。
答案 3 :(得分:0)
错误消息解释了问题:您正在尝试将包含数组属性的字符串反序列化为字符串字典。您不能将数组放入字符串中,因此Type 'System.String' is not supported for deserialization of an array.
。
具体来说,data
属性是一个空数组:
'data':[]
这与引号字符无关。 JSON适用于单字符或双字符。
您需要提供适当的反序列化类型。您可以将属性反序列化为object
,dynamic
或创建与JSON文本匹配的类,例如:
var response = jss.Deserialize<Dictionary<string,object>>(responseValue);
或者:
class MyError
{
public string[] data{get;set;}
public string error_msg {get;set;}
public string message {get;set;}
}
var response = jss.Deserialize<MyError>(responseValue);
答案 4 :(得分:0)
您可以对此进行改进。
static private T CleanJson<T>(string jsonData)
{
var json = jsonData.Replace("\t", "").Replace("\r\n", "");
var loop = true;
do
{
try
{
var m = JsonConvert.DeserializeObject<T>(json);
loop = false;
}
catch (JsonReaderException ex)
{
var position = ex.LinePosition;
var invalidChar = json.Substring(position - 2, 2);
invalidChar = invalidChar.Replace("\"", "'");
json = $"{json.Substring(0, position -1)}{invalidChar}{json.Substring(position)}";
}
} while (loop);
return JsonConvert.DeserializeObject<T>(json);
}
示例;
var item = CleanJson<ModelItem>(jsonString);