使用Json.Encode()序列化对象时更改成员名称

问题描述:

我正在寻找一种方法来更改属性的名称,当它被编码为JSON,其工作方式类似于DisplayAttribute可用于更改它的显示名称。使用Json.Encode()序列化对象时更改成员名称

例如,如果我编码以下类JSON字符串

public class LatLng 
{ 
    public double Latitude { get; set; } 
    public double Longitude { get; set; } 
} 

string result = Json.Encode(new LatLng{ Latitude = 10, Longitude = 20 }); 

的结果将是:{"Latitude":10,"Longitude":20}

有用来创建一个JsonNameAttribute添加到类的每个属性的方式,如下所示

public class LatLng 
{ 
    [JsonName("lat")] 
    public double Latitude { get; set; } 
    [JsonName("lng")] 
    public double Longitude { get; set; } 
} 

string result = Json.Encode(new LatLng{ Latitude = 10, Longitude = 20 }); 

所以结果会是:{"lat":10,"lng":20}

这样做可以不创建我自己的JSON序列化程序?

有几个可能的原因:

  • 定义,这将有正确的价值观,然后你的LatLng域模型映射到这个视图模型和序列化视图模型视图模型。
  • JavaScriptSerializer类不支持属性,但可以编写自定义JavaScriptConverter
  • 使用DataContractJsonSerializer类,该类允许您通过使用[DataMember]属性修饰成员名称来定义成员名称。