序列化对象的属性以在数组中分离JSON对象 [英] Serialize an object's properties to separate JSON objects in an array
本文介绍了序列化对象的属性以在数组中分离JSON对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想序列化属性,但每个属性都封装在数组中的单独JSON对象中.
I want to serialize properties but with each property enclosed in a separate JSON object in an array.
以下示例:
public class Metadata
{
public string Name { get; set; }
public Guid Id { get; set; }
}
public void SerializeCars()
{
var data = new Metadata { Name = "MyName", Id = Guid.NewGuid() };
var json = JsonConvert.SerializeObject(data, Formatting.Indented);
}
当前结果将是:
{
"Name": "MyName",
"Id": "f9c4bc06-0b99-47ff-b22b-ea094fc188ee"
}
我希望它成为(缺少上面的"td"类):
I want it to be (missing "td" class above):
{
"td": [{
"name": "myName"
}, {
"id": "f9c4bc06-0b99-47ff-b22b-ea094fc188ee"
}]
}
可以解决吗?
推荐答案
您可以创建一个自定义JsonConverter以获得所需的输出:
You can create a custom JsonConverter to get the output you want:
class MetadataConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(Metadata));
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
JArray array = new JArray();
foreach (PropertyInfo pi in value.GetType().GetProperties().Where(p => p.CanRead))
{
array.Add(new JObject(new JProperty(pi.Name, pi.GetValue(value, null))));
}
JObject obj = new JObject(new JProperty("td", array));
obj.WriteTo(writer);
}
public override bool CanRead
{
get { return false; }
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
然后,像这样使用它:
var json = JsonConvert.SerializeObject(data, Formatting.Indented, new MetadataConverter());
提琴: https://dotnetfiddle.net/5IRDeu
这篇关于序列化对象的属性以在数组中分离JSON对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文