我正在尝试创建一个与此JSON结构的JSON.NET deserealization相匹配的模型: 第一项......
{
"190374": {
"vid": 190374,
"canonical-vid": 190374,
"portal-id": 62515,
"is-contact": true,
"profile-token": "AO_T-mN1n0Mbol1q9X9UeCtRwUE1G2GFUt0VVxCzpxUF1LJ8L3i75x9NmhIiS0K9UQkx19bShhlUwlIujY4pSXAFPEfDG-k9n8BkbftPw6Y5oM3eU5Dc_Mm-5YNJTXiWyeVSQJAN_-Xo",
"profile-url": "https://app.hubspot.com/contacts/62515/lists/public/contact/_AO_T-mN1n0Mbol1q9X9UeCtRwUE1G2GFUt0VVxCzpxUF1LJ8L3i75x9NmhIiS0K9UQkx19bShhlUwlIujY4pSXAFPEfDG-k9n8BkbftPw6Y5oM3eU5Dc_Mm-5YNJTXiWyeVSQJAN_-Xo/",
"properties": {
"phone": {
"value": "null"
},
"hs_social_linkedin_clicks": {
"value": "0"
},
"hs_social_num_broadcast_clicks": {
"value": "0"
},
"hs_social_facebook_clicks": {
"value": "0"
},
"state": {
"value": "MA"
},
"createdate": {
"value": "1380897795295"
},
"hs_analytics_revenue": {
"value": "0.0"
},
"lastname": {
"value": "Mott"
},
"company": {
"value": "HubSpot"
}
},
"form-submissions": [],
"identity-profiles": []
},
"form-submissions": [],
"identity-profiles": []
},
**next similar entry**
然后我尝试与List of this绑定:
public class HubSpotEmailRqst
{
public int vid { get; set; }
public int canonical-vid { get; set; }
public int portal-id { get; set; }
public bool is-contact { get; set; }
public String profile-token { get; set; }
public String profile-url { get; set; }
public Dictionary<string, string> properties { get; set; }
public Dictionary<string,string> form-submissions { get; set; }
public Dictionary<string,string> identity-profiles { get; set; }
}
我不确定这也会绑定,但我无法理解我们在字段名称中不能使用连字符的事实,我该如何解决这个问题呢?
答案 0 :(得分:7)
使用带有连字符的属性有两种方法:
根据C#规则命名属性,但使用[JsonProperty("property-name")]
属性对其进行修饰。
使用修改属性名称的自定义合约解析程序。例如,如果JSON中的所有属性都是一致命名的,则可以使用regex将PascalCase C#属性名称更改为小写JSON属性名称。有关示例实现,请参阅Json.NET中的CamelCasePropertyNamesContractResolver
。
答案 1 :(得分:1)
如果我正确理解了这个问题,你会感到不安的是你不能在C#程序的字段名中使用连字符吗?为什么不使用CamelCase来识别字段?而不是is-contact
使用'isContact'。而不是canonical-vid
。使用canonicalVid.
当然,名称可能看起来不同,但对于程序员来说,意思应该是明确的。