C# 如何向类类型添加序列化json并序列化该类而不获取\u0022
尝试将序列化字符串添加到另一个类字符串类型,则该类需要序列化,但由于我实现了双重序列化,它正在\u0022中添加。是否有方法使其正确工作,以便在序列化请求类时不添加表示“的\u0022类型?” 小提琴代码C# 如何向类类型添加序列化json并序列化该类而不获取\u0022,c#,.net,C#,.net,尝试将序列化字符串添加到另一个类字符串类型,则该类需要序列化,但由于我实现了双重序列化,它正在\u0022中添加。是否有方法使其正确工作,以便在序列化请求类时不添加表示“的\u0022类型?” 小提琴代码 public class Program { public static void Main() { Request request= new Request(); Contract contrac
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":"{\u0022number\u0022:\u002212345\u0022}"}
所需输出
{"number":"12345"}
{"dataObject":"{\"number\":\"12345\"}"}
您正在寻找一个不同的编码器,如果更改库不是一个选项,那么请使用
unasseredjsonescaping
:
var options = new JsonSerializerOptions
{
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
};
var payload= JsonSerializer.Serialize(request, options);
谨防此方法无法脱除HTML和其他特殊字符,因此应考虑避免潜在的XSS漏洞。
< P>因为这些字符是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();
});
}
static string decodeCodeDNOnAsciicharacters(字符串值)
{
返回正则表达式。替换(
价值
@“\\u(?[a-zA-Z0-9]{4}”,
m=>
{
return((char)int.Parse(m.Groups[“Value”].Value,NumberStyles.HexNumber)).ToString();
});
}
尝试使用Newtonsoft.Json而不是JsonSerializerYep,即{“dataObject”:“{\“number\”:\“12345\”}。非常感谢!为什么需要该输出?两者的处理方式应该相同。