模型匹配此JSON用于反序列化,字段名称用短划线

时间:2014-02-04 21:21:03

标签: c# json model json.net

我正在尝试创建一个与此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; }
}

我不确定这也会绑定,但我无法理解我们在字段名称中不能使用连字符的事实,我该如何解决这个问题呢?

2 个答案:

答案 0 :(得分:7)

使用带有连字符的属性有两种方法:

  1. 根据C#规则命名属性,但使用[JsonProperty("property-name")]属性对其进行修饰。

  2. 使用修改属性名称的自定义合约解析程序。例如,如果JSON中的所有属性都是一致命名的,则可以使用regex将PascalCase C#属性名称更改为小写JSON属性名称。有关示例实现,请参阅Json.NET中的CamelCasePropertyNamesContractResolver

答案 1 :(得分:1)

如果我正确理解了这个问题,你会感到不安的是你不能在C#程序的字段名中使用连字符吗?为什么不使用CamelCase来识别字段?而不是is-contact使用'isContact'。而不是canonical-vid。使用canonicalVid.当然,名称可能看起来不同,但对于程序员来说,意思应该是明确的。