当我尝试用以下方式序列化我的对象时,JsonConvert.SerializeObject
出现了问题:
var statementOfAccount = new
{
main = new
{
@xm = "https://api-path.com",
RESTHeader = new
{
Responsibility = "Responsibility ",
RespApplication = "AR",
NLSLanguage = "AMERICAN"
}
}
};
给我:
{
"main": {
"xm": "https://api-path.com",
"RESTHeader": {
"Responsibility": "Responsibility",
"RespApplication": "AR",
"NLSLanguage": "AMERICAN"
}
}
}
因此,基本上是从@xm中删除@,请注意,我不能更改属性的名称,因此需要一个按原样序列化它的解决方案。
发布于 2022-08-15 11:24:28
一种方法是创建自定义类,而不是使用匿名。
public class Custom
{
....
[JsonProperty["@xm"]
public string @xm {get; set;}
....
}
由于您的匿名对象属性是已知的,并且不会导致任何属性重叠,所以另一种方法是在序列化后替换json字符串。
json=json.Replace("xm:","@xm:");
发布于 2022-08-15 12:13:16
这解决了我使用JsonPropertyName的问题,但是使用了JsonSerializer.Serialize而不是JsonConvert.SerializeObject,所以问题是我使用了一个匿名对象,就像大多数人建议的那样,但是使用JsonPropertyName只对JsonSerializer.Serialize起作用,它不适用于JsonConvert.SerializeObject
解决办法:
public class Main
{
[JsonPropertyName("@xm")]
public string @xm { get; set; }
public RESTHeader RESTHeader { get; set; }
}
public class RESTHeader
{
public string Responsibility { get; set; }
public string RespApplication { get; set; }
public string NLSLanguage { get; set; }
}
public class Root
{
public Main main { get; set; }
}
var statementOfAccount = new Root
{
main = new Main
{
@xm = "https://api-path",
RESTHeader = new RESTHeader
{
Responsibility = "Responsibility ",
RespApplication = "AR",
NLSLanguage = "AMERICAN"
}
}
};
var json = System.Text.Json.JsonSerializer.Serialize(statementOfAccount);
https://stackoverflow.com/questions/73359658
复制相似问题