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; }
}
我喜欢使用 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; }
}