首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JsonConvert.SerializeObject在我的对象中转义"@“

JsonConvert.SerializeObject在我的对象中转义"@“
EN

Stack Overflow用户
提问于 2022-08-15 10:20:44
回答 2查看 82关注 0票数 0

当我尝试用以下方式序列化我的对象时,JsonConvert.SerializeObject出现了问题:

代码语言:javascript
复制
var statementOfAccount = new
                {
                    main = new 
                    {
                        @xm = "https://api-path.com",
                        RESTHeader = new 
                        {
                            Responsibility = "Responsibility ",
                            RespApplication = "AR",
                            NLSLanguage = "AMERICAN"
                        }
                    }
                };

给我:

代码语言:javascript
复制
{
  "main": {
    "xm": "https://api-path.com",
    "RESTHeader": {
      "Responsibility": "Responsibility",
      "RespApplication": "AR",
      "NLSLanguage": "AMERICAN"
    }
  }
}

因此,基本上是从@xm中删除@,请注意,我不能更改属性的名称,因此需要一个按原样序列化它的解决方案。

EN

回答 2

Stack Overflow用户

发布于 2022-08-15 11:24:28

一种方法是创建自定义类,而不是使用匿名。

代码语言:javascript
复制
public class Custom
{
....
[JsonProperty["@xm"]
 public string @xm {get; set;}
....
}

由于您的匿名对象属性是已知的,并且不会导致任何属性重叠,所以另一种方法是在序列化后替换json字符串。

代码语言:javascript
复制
json=json.Replace("xm:","@xm:");
票数 1
EN

Stack Overflow用户

发布于 2022-08-15 12:13:16

https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-customize-properties?pivots=dotnet-6-0

这解决了我使用JsonPropertyName的问题,但是使用了JsonSerializer.Serialize而不是JsonConvert.SerializeObject,所以问题是我使用了一个匿名对象,就像大多数人建议的那样,但是使用JsonPropertyName只对JsonSerializer.Serialize起作用,它不适用于JsonConvert.SerializeObject

解决办法:

代码语言:javascript
复制
  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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73359658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档