Serialization JSON.NET自定义序列化以排除属性名
我使用的是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",
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());