c# json 使用属性序列化

c# json serialize with attributes

我喜欢使用 rest api 为 Eureka 注册服务编写一个 .net 连接器。它要求如下所示的 json 格式,并希望从配置 class 生成 json。无法找到如何序列化某些属性,例如看起来像 $ 的属性,以及在 json 的 beginnnig 中的 @,例如 "securePort": {"$": "8443", "@enabled": "true"},

eureka 所需的json:

{
    "instance": {
        "hostName": "WKS-SOF-L011",
        "app": "com.automationrhapsody.eureka.app",
        "vipAddress": "com.automationrhapsody.eureka.app",
        "secureVipAddress": "com.automationrhapsody.eureka.app"
        "ipAddr": "10.0.0.10",
        "status": "STARTING",
        "port": {"$": "8080", "@enabled": "true"},
        "securePort": {"$": "8443", "@enabled": "true"},
        "healthCheckUrl": "http://WKS-SOF-L011:8080/healthcheck",
        "statusPageUrl": "http://WKS-SOF-L011:8080/status",
        "homePageUrl": "http://WKS-SOF-L011:8080",
        "dataCenterInfo": {
            "@class": "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo", 
            "name": "MyOwn"
        },
    }
}

我的 class 预期会在序列化后生成下面的 json(我使用 newtonsoft.json):

public class Port
{
    public string PortName { get; set; }
    [JsonProperty("enabled")]
    public bool Enabled { get; set; }
}

public class DataCenterInfo
{
    [JsonProperty("class")]
    public string Class { get; set; }
    [JsonProperty("name")]
    public string Name { get; set; }
}

public class EurekaRegisterParams
{
    [JsonProperty("instanceId")]
    public string InstanceId { get; set; }
    [JsonProperty("hostName")]
    public string HostName { get; set; }
    [JsonProperty("app")]
    public string App { get; set; }
    [JsonProperty("ipAddr")]
    public string IpAddr { get; set; }
    [JsonProperty("status")]
    public string Status { get; set; }
    [JsonProperty("port")]
    public Port Port { get; set; }
    [JsonProperty("securePort")]
    public Port SecurePort { get; set; }
    [JsonProperty("countryId")]
    public string CountryId { get; set; }
    [JsonProperty("dataCenterInfo")]
    public DataCenterInfo DataCenterInfo { get; set; }
    [JsonProperty("homePageUrl")]
    public string HomePageUrl { get; set; }
    [JsonProperty("statusPageUrl")]
    public string StatusPageUrl { get; set; }
    [JsonProperty("healthCheckUrl")]
    public string HealthCheckUrl { get; set; }
}

您已经非常接近解决方案了。您可以使用 JsonProperty 属性来完成您的工作,就像您已经对其余属性所做的那样。

public class Port
{
    [JsonProperty("$")]
    public string PortName { get; set; }
    [JsonProperty("@enabled")]
    public bool Enabled { get; set; }
}