我正在尝试将序列化的对象发布到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"
]
}
]
}
答案 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 ; }