Serialization JSON.NET自定义序列化以排除属性名

Serialization JSON.NET自定义序列化以排除属性名,serialization,json.net,Serialization,Json.net,我使用的是Json.NET,我有以下代码 public class Row { [JsonProperty] public IDictionary<string, object> Cells { get; set; } } //json输出: { "Data": [ { "Cells": { "column1": "20",

我使用的是Json.NET,我有以下代码

public class Row
{
    [JsonProperty]
    public IDictionary<string, object> Cells { get; set; }
}
//json输出:

 {

    "Data": [
              {
                "Cells": {
                     "column1": "20",
                     "column2": "20"
                     }
              },
              {
                "Cells": {
                    "column1": "20",
                    "column2": "20"
                    }
              }
      ]
}
但是,我绑定到的UI网格需要以下json结构

   "Data": [
               {
                     "column1": "20",
                     "column2": "20"                  
               },
               {                   
                    "column1": "20",
                    "column2": "20"                  
               }
           ]
有没有办法删除“单元格”并生成如上所述的Json结构

我查看了JSON.NET帮助文档,但找不到实现这一点的方法。 还尝试重写DynamicContractResolver的CreateProperty方法,以查看是否可以更改序列化行为,但无法更改

 public class DynamicContractResolver : DefaultContractResolver
 {       
    protected override JsonProperty CreateProperty(System.Reflection.MemberInfo member, MemberSerialization memberSerialization)
    {
        if (member.Name == "Cells")
        {
             //remove the name "Cells" from the serialized structure    
        }
        return base.CreateProperty(member, memberSerialization);
    }
 }

或者这不是简单的支持?非常感谢您的建议或指导

找到了一种通过创建自定义转换器来解决此问题的方法。下面的代码生成我需要的Json结果

public class GridJsonConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return true; //TODO: more logic check the type before the conversion..
    }

    public override void WriteJson(JsonWriter writer, 
       object value, JsonSerializer serializer)
    {
        var rows = (List<Row>)value;

        writer.WriteStartObject();
            writer.WritePropertyName("data");
                writer.WriteStartArray();

        foreach (var row in rows)
        {
            writer.WriteStartObject();
            var cells = row.Cells;

            foreach (var cell in cells)
            {
                writer.WritePropertyName(cell.Key);
                writer.WriteValue(cell.Value);    
            }

            writer.WriteEndObject();
        }

        writer.Flush();
    }

    public override object ReadJson(JsonReader reader, Type objectType, 
       object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

找到了一种通过创建自定义转换器来解决此问题的方法。下面的代码生成我需要的Json结果

public class GridJsonConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return true; //TODO: more logic check the type before the conversion..
    }

    public override void WriteJson(JsonWriter writer, 
       object value, JsonSerializer serializer)
    {
        var rows = (List<Row>)value;

        writer.WriteStartObject();
            writer.WritePropertyName("data");
                writer.WriteStartArray();

        foreach (var row in rows)
        {
            writer.WriteStartObject();
            var cells = row.Cells;

            foreach (var cell in cells)
            {
                writer.WritePropertyName(cell.Key);
                writer.WriteValue(cell.Value);    
            }

            writer.WriteEndObject();
        }

        writer.Flush();
    }

    public override object ReadJson(JsonReader reader, Type objectType, 
       object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}
  string serializeObject = JsonConvert.SerializeObject
 (someData, Formatting.Indented,   new GridJsonConverter());