我有一个像这样的JSON字符串
{
"data": {
"id": "f4ba528a54117950",
"type": "password-requests",
"links": {
"self": "https://api.abc.com/api/v2/password-requests/f4ba528a54117950"
},
"attributes": {
"login": "abc",
"type": "agent",
"send-media": false,
"registration-token": "ced84635eba"
}
}
}
我的课程是这样的
public class SightCallResult
{
public SightCallData data { get; set; }
}
public class SightCallData
{
public string id { get; set; }
public string type { get; set; }
public Dictionary<string, string> links { get; set; }
public AgentAttributes attributes { get; set; }
}
public class AgentAttributes
{
public string Login { get; set; }
public string Type { get; set; }
public bool SendMedia { get; set; }
public string RegistrationToken { get; set; }
}
这是我反序列化字符串的方式
sightCallRslt = JsonConvert.DeserializeObject<SightCallResult>(resultMobileToken);
sightCallData = sightCallRslt.data;
agentAttributes = sightCallData.attributes;
Debug.WriteLine(agentAttributes.RegistrationToken);
但是RegistrationToken
始终为null。但是其他字段值已正确分配。任何人都可以解释这是什么原因。
答案 0 :(得分:2)
我认为您正在使用Newtonsoft.Json
,它不会自动将连字符的键名映射到PascalCase的键名。
例如,您可能没有注意到它。 send-media
,因为它不可为空/默认为false。
如果您无法更改json,则可以使用JsonProperty
装饰属性:
[JsonProperty(PropertyName="send-media")]
public bool SendMedia { get; set; }
[JsonProperty(PropertyName="registration-token")]
public string RegistrationToken { get; set; }
答案 1 :(得分:1)
将attributes
的类型更改为Dictionary<string, object>
,或者如果您确定数量有限的可能属性,请使用JsonPropertyAttribute
指定确切的名称:
[JsonProperty("registration-token")]
public string RegistrationToken { get; set; }