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

时间:2011-11-18 04:39:16

标签: json asp.net-mvc-3

我正在寻找一种方法来更改属性的名称,当它被编码为JSON时,其工作方式类似于DisplayAttribute可用于更改其显示名称的方式。

例如,如果我将以下类编码为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序列化程序的情况下完成吗?

1 个答案:

答案 0 :(得分:0)

有几种可能性:

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