在C#中反序列化具有多个特殊字符的json字符串

时间:2017-08-22 05:30:01

标签: c# json deserialization

以下是我的json字符串:

[
  {"Sname":"wordpress_Site_Url","Settings":"http://www.mywebsite.com","lab":false},
  {"Sname":"wordpress_template","Settings":"[vc_row][vc_column width="2/3"][vc_column_text]    {{{description}}}     [/vc_column_text][/vc_column][vc_column width="1/3" css=".vc_custom_1438623014033{border-color: #dbead5 !important;}"] [gravityform id="14" title="false" description="false" ajax="true" field_values="downloadFileID={{downloadURL}}"][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]  [/vc_column_text][/vc_column][/vc_row]","lab":true,"selected":false},
  {"Sname":"dummy","Settings":"abc","lab":false},
  {"Sname":"testing","Settings":"ssds","lab":false}
]

我想编写一个函数,将json中的键Sname作为参数,并从此json字符串返回json中的值Setting

在反序列化之前,转义无效

2 个答案:

答案 0 :(得分:0)

如果您对Settings对象的序列化方式有影响,我建议您正确序列化它。否则你必须做一些糟糕的事情才能让它发挥作用。类似的东西:

    class MyResultClass
    {
        public string Sname { get; set; }
        public string Settings { get; set; }
    }

    private MyResultClass Convert(string str)
    {
        var newStr = str.Replace("\"Settings\"", "VERYUNIQUEKEYWORD")
            .Replace("\"Sname\"", "ANOTHERKEYWORD")
            .Replace("\"", "QUOTE")
            .Replace("VERYUNIQUEKEYWORD", "\"Settings\"")
            .Replace("ANOTHERKEYWORD","\"Sname\"")
            .Replace(":QUOTE",":\"")
            .Replace("QUOTE,","\","); 

        var myObj = JsonConvert.DeserializeObject<MyResultClass>(newStr);
        myObj.Settings = myObj.Settings.Replace("QUOTE", "\"");
        return myObj;
    }

请注意,这不是我的建议。

答案 1 :(得分:-1)

在将JSON保存到DATABASE之前,您需要序列化JSON字符串。 之后,您可以轻松地反序列化您的JSON。