在属性名称中使用减号反序列化 Json

Gay*_*yan 1 c# json restsharp deserialization json-deserialization

我有一个 JSON 返回如下。

   {
    "id": 100,
    "name": "employer 100",
    "externalId": "100-100",
    "networkId": 1000,
    "address": {
        "street-address": "1230 Main Street",
        "locality": "Vancouver",
        "postal-code": "V6B 5N2",
        "region": "BC",
        "country-name": "CA"
    }
   }
Run Code Online (Sandbox Code Playgroud)

所以我创建了类来反序列化上面的json。

    public class Employer
        {
            public int id { get; set; }
            public string name { get; set; }
            public string externalId { get; set; }
            public int networkId { get; set; }
            public Address address { get; set; }
        }
    public class Address
        {
            public string street_address { get; set; }
            public string locality { get; set; }
            public string postal_code { get; set; }
            public string region { get; set; }
            public string country_name { get; set; }
        }
Run Code Online (Sandbox Code Playgroud)
   {
    "id": 100,
    "name": "employer 100",
    "externalId": "100-100",
    "networkId": 1000,
    "address": {
        "street-address": "1230 Main Street",
        "locality": "Vancouver",
        "postal-code": "V6B 5N2",
        "region": "BC",
        "country-name": "CA"
    }
   }
Run Code Online (Sandbox Code Playgroud)

但是我无法从 Json 字符串中获取街道地址、邮政编码和国家/地区名称。我认为因为 Json 输出键包含 "" - "" (因此我得到了空值)。

那么我该如何解决我的问题呢?

Jim*_*ett 5

在您的属性上使用 DeserializeAs 属性:

[DeserializeAs(Name = "postal-code")]
public string postal_code { get; set; }
Run Code Online (Sandbox Code Playgroud)

这允许您设置映射到类中的属性的 json 中相同的属性,从而允许该属性具有与儿子不同的名称。

https://github.com/restsharp/RestSharp/wiki/Deserialization