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

时间:2018-09-10 10:16:35

标签: c# json json.net

我正在尝试将序列化的对象发布到Web服务。该服务要求将属性名称“ context”和“ type”设置为“ @context”和“ @type”,否则将不接受请求。

Newtonsoft JSON.NET正在从属性名称“ context”和“ type”中删除“ @”,而我需要它们能够传递到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 个答案:

答案 0 :(得分:6)

在C#中,@ prefix on a variable用于允许您使用保留字,例如@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>();
}

答案 1 :(得分:1)

您可以使用一些属性来定义字段名称。

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

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