C#将字符串转换为JSON错误

时间:2016-09-16 18:27:15

标签: c# html json

公共类的一部分我已经为dataTables插件构建了一个数据结构。

构建数据结构的代码是:

var response = "{ \"data\": [";
    response = response + "[";
    response = response + "\"Clark, Keith\",";
    response = response + "\"Corporate\",";
    response = response + "\"XXX-XXX-XXXX\",";
    response = response + "\"XXX-XXX-XXXX\",";
    response = response + "\"XXXX@XXXX.com\"";
    response = response + "],";
    response = response + "[";
    response = response + "\"Clark, Keith\",";
    response = response + "\"Corporate\",";
    response = response + "\"YYY-YYY-YYYY\",";
    response = response + "\"YYY-YYY-YYYY\",";
    response = response + "\"YYYY@XXXX.com\"";
    response = response + "]";
    response = response + "] }";

return response;

运行正常并按预期创建表。我遇到问题的地方是当我尝试将HTML标记添加到字段时。我想在名称旁边使用字体真棒图标来表示这样的状态:

<i class="fa fa-arrow-up" style="color: #00ff00;" aria-hidden="true">

我尝试修改我的代码:

response = response + "\"<i class=\"\"fa fa-arrow-up\"\" style=\"\"color: #00ff00;\"\" aria-hidden=\"\"true\"\">Clark, Keith\",";

但是现在我收到的错误是JSON没有正确格式化。我是否遗漏了某些内容,或者是否可以在JSON结构中使用HTML标记?

1 个答案:

答案 0 :(得分:0)

问题是你正在生成一个无效的json字符串文字。

"<i class=""fa fa-arrow-up"" style=""color: #00ff00;"" aria-hidden=""true"">Clark, Keith",

使用文字反斜杠转义报价,而不是加倍。

你必须这样做:

"\"<i class=\\\"fa fa-arrow-up\\\" style=\\\"color: #00ff00;\\\" aria-hidden=\\\"true\\\">Clark, Keith\","

这说明了为什么你不应该生成这样的字符串。有些工具可以为您安全地使用它们。 Json.net可以轻松完成这项工作。

var markup = "<i class=\"fa fa-arrow-up\" style=\"color: #00ff00;\" aria-hidden=\"true\">";
var response = new JObject
{
    ["data"] = new JArray
    {
        new JArray
        {
            markup + "Clark, Keith",
            "Corporate",
            "XXX-XXX-XXXX",
            "XXX-XXX-XXXX",
            "XXXX@XXXX.com",
        },
        new JArray
        {
            markup + "Clark, Keith",
            "Corporate",
            "YYY-YYY-YYYY",
            "YYY-YYY-YYYY",
            "YYYY@XXXX.com",
        },
    }
};
return response.ToString();

话虽如此,您不应该为数据添加标记。数据就是数据,仅此而已。如果您想影响它的显示方式,那么该标记应该添加到您的视图中。