代码之家  ›  专栏  ›  技术社区  ›  saulyasar

如何使用JSONSerialize序列化特殊字符

  •  1
  • saulyasar  · 技术社区  · 6 年前

    我有一个带有塞尔维亚字符的json数据!当我想要获得这些数据时,我需要JSONSerialize和数据转换 Željko Cvijetić }\u0001eljko Cvijeti\u0007\u0001

    你有办法解决这个问题吗?

    这里我有一个Json结果示例

    "SMSFlowMessages": [
    {
      "Display": "Example",
      "MessageId": 104,
      "MessageText": "Dear }\u0001eljko Cvijeti\u0007\u0001, the 22-05-2018 it will be your Birthday!!\nIn this special day you will have double points on all products!\n\nExample Team"
    },
    {
      "Display": "Example",
      "MessageId": 105,
      "MessageText": "Dear test test, the 22-05-2035 it will be your Birthday!!\nIn this special day you will have double points on all products!\n\nExample Team"
    },
    

      JsonSerializerSettings settings = new JsonSerializerSettings() { Culture = new CultureInfo("sr-Latn-CS") };
        json = JsonConvert.SerializeObject(root, settings);
    
         root.SMSFlowMessages.Clear();
         root.ViberFlowMessages.Clear();
    
          try
          {
    
          log.append("SMS SEND>>START:" + Environment.NewLine + json + Environment.NewLine + ">>END", logdir);
    
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri(apiurl);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
            var getresult = client.PostAsync(apiurl, stringContent).Result;
            string resultContent = getresult.Content.ReadAsStringAsync().Result;
            log.append("SMS RECV<<START:" + Environment.NewLine + resultContent + Environment.NewLine + "<<END", logdir);
    
             smsflag = "";
             json = "";
    
             }
    
    1 回复  |  直到 6 年前
        1
  •  10
  •   Martin Liversage    6 年前

    JsonSerializerSettings.StringEscapeHandling 财产:

    var text = "Željko Cvijetić";
    var jsonSerializerSettings = new JsonSerializerSettings {
        StringEscapeHandling = StringEscapeHandling.EscapeNonAscii
    };
    var json = JsonConvert.SerializeObject(text, jsonSerializerSettings);
    

    这将导致以下JSON:

    "\u017deljko Cvijeti\u0107"
    

    "}\u0001" . 请看 Unicode escape sequences 了解如何转义JavaScript字符串文字中的字符。

        2
  •  10
  •   Fabian T.    4 年前

    虽然这条线已经很旧了,但我会尽力帮助一些在我之后偶然发现这条线的人。 我真的不明白这个帖子的主要问题或意图,但我认为saulyasar错误地表达了他的问题。我将他的问题解释为:如何将字符串“eljko Cvijeti”序列化为JSON,而不将字符转换为“}\u0001”之类的内容。

    答案很简单:

    var output = JsonSerializer.Serialize("Željko Cvijetić", new JsonSerializerOptions
                    {
                        WriteIndented = true,
                        Encoder = JavaScriptEncoder.Default
                    });
    
    -> output: "\"\\u017Deljko Cvijeti\\u0107\""
    

    将字符串转换为JSON,但转换特殊字符,而

    var output = JsonSerializer.Serialize("Željko Cvijetić", new JsonSerializerOptions
                    {
                        WriteIndented = true,
                        Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
                    });
    
    -> output: "\"Željko Cvijetić\""
    

    通过使用UnasseredJSonescaping编码器解决了这个问题。