猿问

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

我正在尝试将序列化对象发布到 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"

      ]

    }

  ]

}


烙印99
浏览 277回答 2
2回答

扬帆大鱼

在 C# 中,@变量的前缀用于允许您使用保留字,例如@class. 所以它会被有效地忽略。要控制序列化的属性名称,您需要将JsonProperty属性添加到模型中:public class PotentialAction{&nbsp; &nbsp; [JsonProperty("@context")]&nbsp; &nbsp; public string @context { get; set; }&nbsp; &nbsp; [JsonProperty("@type")]&nbsp; &nbsp; public string @type { get; set; }&nbsp; &nbsp; public string name { get; set; }&nbsp; &nbsp; public IList<string> target { get; set; } = new List<string>();}

慕森王

您可以使用一些属性来定义字段名称应该是什么。https://www.newtonsoft.com/json/help/html/SerializationAttributes.htm你会像这样使用它:&nbsp;[JsonProperty(PropertyName = "@context")] Public string context { get; set ; }
随时随地看视频慕课网APP
我要回答