C# 将类序列化为json数组
使用C# 将类序列化为json数组,c#,json,serialization,json.net,C#,Json,Serialization,Json.net,使用Json.Net 5.0.5我想序列化这个类 [JsonObject(MemberSerialization.OptIn)] public class RingPoint { public double X { get; set; } public double Y { get; set; } public RingPoint(double x, double y) { X = x; Y = y; } [J
Json.Net 5.0.5
我想序列化这个类
[JsonObject(MemberSerialization.OptIn)]
public class RingPoint
{
public double X { get; set; }
public double Y { get; set; }
public RingPoint(double x, double y)
{
X = x;
Y = y;
}
[JsonProperty(Required = Required.Always)]
public double[] Location { get { return new[] { X, Y }; } }
public bool Equals(RingPoint obj)
{
return obj != null && obj.X == X && obj.Y == Y;
}
}
转换为此json格式
{"rings":[[[0.0,0.0],[1.0,0.0],[2.0,0.0],[0.0,0.0]]]}
正常的序列化给了我
{"rings":[[{"Location":[0.0,0.0]},{"Location":[1.0,0.0]},{"Location":[2.0,0.0]},{"Location":[0.0,0.0]}]]}
使用自定义转换器非常简单,但是是否有一种属性方法来实现这一点,或者这是何时使用JsonConverter的最佳示例
public class RingPointConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteStartArray();
writer.WriteValue(((RingPoint)value).X);
writer.WriteValue(((RingPoint)value).Y);
writer.WriteEndArray();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return null;
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof (RingPoint);
}
}
如果类的定义不同,则不需要自定义转换器。你的班级应该是这样的
public class rings
{
List<List<List<double>>> rings;
}
公共类环
{
列表环;
}
真恶心。。。但是,为了使默认的JsonConverter正确地序列化它,您需要在列表中的列表中包含一个双精度数组/列表。我甚至不想开始编写代码来为它添加值。顺便说一下,数组和列表由JsonConverter处理,我选择使用列表是因为我不知道数组的语法是什么(我认为它不存在)
无论如何,您的自定义转换器可能是一种更好的方法。它更干净,更有意义。试图填充该列表将是一件痛苦的事。这将是一个锯齿状数组:
double[][]rings=new double[1][];环[0]=新的双精度[1][];环[0][0]=新的双精度[1];环[0][0][0]=3.4代码>。并不是说我建议你这么做……:)@乔伊诺斯说得通,我想可能就是这样。然后,我开始思考列表的嵌套方式,我自己也感到困惑。