【问题标题】:Serialize for JavaScript apex为 JavaScript 顶点序列化
【发布时间】:2018-09-12 15:34:44
【问题描述】:

我需要将一些简单的对象从 .NET 序列化为 JavaScript...

但是我的 apex 有点问题……

C# 示例

var obj = new { id = 0, label = @"some ""important"" text" };
string json1 = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
string json2 = Newtonsoft.Json.JsonConvert.SerializeObject(obj,
                   new Newtonsoft.Json.JsonSerializerSettings() 
                   {
                       StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeHtml 
                   });

JavaScript 示例

var resJson1= JSON.parse('{"id":0,"label":"some \"important\" text"}');
var resJson2= JSON.parse('{"id":0,"label":"some \u0022important\u0022 text"}');

两个解析都给我同样的错误

VM517:1 未捕获的语法错误:JSON 中的意外标记 I 在位置 23 在 JSON.parse()

我哪里错了?

【问题讨论】:

    标签: javascript c# json json.net json-serialization


    【解决方案1】:

    您将生成的 JSON 字符串粘贴到 JavaScript 字符串常量中,而无需进一步转义。试试

    console.log('{"id":0,"label":"some \"important\" text"}');
    

    您会看到{"id":0,"label":"some "important" text"},即“重要”引号不再被反斜杠转义。 (对于 \u0022 示例,您也会得到相同的结果。)如果您想粘贴反斜杠,您将不得不再次转义它们:

    var resJson1= JSON.parse('{"id":0,"label":"some \\"important\\" text"}');
    

    如果从文件或 URL 中读取,您使用单个反斜杠生成的 JSON 就可以了,而不是作为字符串常量粘贴到 JavaScript 中。

    【讨论】:

    • 好的,现在为了开发,我正在粘贴它......没有“c#方式”可以在“pastable”javascript字符串中进行序列化?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多