在json序列化中重命名该属性以获取匿名

时间:2014-04-28 08:56:39

标签: c# json serialization

我想知道无论如何要在JSON序列化中重命名属性?

var obj =  data.Select(p => new
           {
               id = p.Id,
               text = p.Name,
               a_attr = new { data_extra = new { Weight = p.Weight, MaxScore = p.MaxScore} },
            }).ToList();

序列化后,应将data_extra重命名为data-extra

1 个答案:

答案 0 :(得分:0)

我建议切换到DataContractSerializer(MSDN Link)以便于重命名属性值。您还需要为数据创建一些小类。见下文:

[DataContract]
public class ReturnObject // Feel free to name to something more suitable
{
    [DataMember(Name="id")]
    public int Id {get; set;} // Int assumed
    [DataMember(Name="text")]
    public string Name {get; set;}
    [DataMember(Name="a_attr")]
    public ReturnObjectAttributes Attributes {get; set;}
}

[DataContract]
public class ReturnObjectAttributes // Feel free to name to something more suitable
{
    [DataMember(Name="data-extra")]
    public ExtraData ReturnObjectAttrData {get; set;}
}

[DataContract]
public class ExtraData // Feel free to name to something more suitable
{
    [DataMember]
    public decimal Weight{get; set;} // Decimal assumed
    [DataMember]
    public decimal MaxScore {get; set;} // Decimal assumed
}

// Then process
data.Select(p => new ReturnObject()
{
    Id = p.Id,
    Name = p.Name,
    Attributes = new ReturnObjectAttributes()
    {
        ExtraData = new ReturnObjectAttrData()
        {
            Weight = p.Weight,
            MaxScore = p.MaxScore
        }
}).ToList();

您需要做的就是将其序列化 - 请参阅提供的MSDN链接中的信息。