如何在不获取\u0022的情况下向类类型添加序列化json并序列化该类



试图将一个序列化的字符串添加到另一个类字符串类型,然后该类需要序列化,但由于我实现了双重序列化,它正在\u0022中添加。有没有办法使它正确地工作,使\u0022类型表示";在序列化请求类时没有添加?

Fiddle代码

public class Program
{
public static void Main()
{
Request request= new Request();
Contract contract = new Contract();
contract.number= "12345";
var contractSerialized = JsonSerializer.Serialize(contract);
Console.WriteLine(contractSerialized);
request.dataObject= contractSerialized;
var payload= JsonSerializer.Serialize(request);
Console.WriteLine( payload );
}
}
public class Request
{
public string dataObject { get; set; }
}
public class Contract
{
public string number { get; set; }
}

电流输出

{"number":"12345"}
{"dataObject":"{u0022numberu0022:u002212345u0022}"}

要求输出

{"number":"12345"}
{"dataObject":"{"number":"12345"}"}

由于这些字符是ascii,您需要从响应中解码或跳过这些模式。使用以下代码对字符进行解码

static string DecodeEncodedNonAsciiCharacters(string value)
{
return Regex.Replace(
value,
@"\u(?<Value>[a-zA-Z0-9]{4})",
m =>
{
return ((char)int.Parse(m.Groups["Value"].Value, NumberStyles.HexNumber)).ToString();
});
}

您正在寻找不同的编码器,如果不能更改库,则使用UnsafeRelaxedJsonEscaping:

var options = new JsonSerializerOptions
{
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
};
var payload= JsonSerializer.Serialize(request, options);

请注意,此方法不会转义HTML和其他一些特殊字符,因此请考虑使用它以避免潜在的XSS漏洞。

相关内容

最新更新