为了账号安全,请及时绑定邮箱和手机立即绑定

序列化 C# 对象并保留属性名称

序列化 C# 对象并保留属性名称

C#
烙印99 2022-01-09 17:40:12
我正在尝试将序列化对象发布到 Web 服务。该服务要求将属性名称“context”和“type”格式化为“@context”和“@type”,否则它不会接受请求。Newtonsoft JSON.NET 正在从属性名称“上下文”和“类型”中删除“@”,我需要将它们传递到 JSON 中。有人可以帮忙吗?这是我正在使用的课程public class PotentialAction{    public string @context { get; set; }    public string @type { get; set; }    public string name { get; set; }    public IList<string> target { get; set; } = new List<string>();}这是它被转换为的 JSON:{  "potentialAction": [   {      "context": "http://schema.org",      "type": "ViewAction",      "name": "View in Portal",      "target": [        "http://www.example.net"      ]    }  ]}但这就是我需要将其序列化为:{  "potentialAction": [   {      "@context": "http://schema.org",      "@type": "ViewAction",      "name": "View in Portal",      "target": [        "http://www.example.net"      ]    }  ]}
查看完整描述

2 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

在 C# 中,@变量的前缀用于允许您使用保留字,例如@class. 所以它会被有效地忽略。要控制序列化的属性名称,您需要将JsonProperty属性添加到模型中:


public class PotentialAction

{

    [JsonProperty("@context")]

    public string @context { get; set; }


    [JsonProperty("@type")]

    public string @type { get; set; }


    public string name { get; set; }

    public IList<string> target { get; set; } = new List<string>();

}


查看完整回答
反对 回复 2022-01-09
?
慕森王

TA贡献1777条经验 获得超3个赞

您可以使用一些属性来定义字段名称应该是什么。

https://www.newtonsoft.com/json/help/html/SerializationAttributes.htm

你会像这样使用它: [JsonProperty(PropertyName = "@context")] Public string context { get; set ; }


查看完整回答
反对 回复 2022-01-09
  • 2 回答
  • 0 关注
  • 276 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信