使用双引号

时间:2017-05-04 07:40:16

标签: c# string

我正在尝试反序列化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("\"","'");

5 个答案:

答案 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("\"", "'"));

Check the output

如果要返回此值,则将其保存在变量中并返回该变量。希望我的回答能帮到你。如果有任何评论如下。

答案 3 :(得分:0)

错误消息解释了问题:您正在尝试将包含数组属性的字符串反序列化为字符串字典。您不能将数组放入字符串中,因此Type 'System.String' is not supported for deserialization of an array.

具体来说,data属性是一个空数组:

'data':[]

这与引号字符无关。 JSON适用于单字符或双字符。

您需要提供适当的反序列化类型。您可以将属性反序列化为objectdynamic或创建与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);