![](/img/trans.png)
[英]How do I correctly parse a JSON string using Newtonsoft.json to an object in C#?
[英]How do I parse a json object containing a array of arrays into a list of objects in C# using Newtonsoft.Json?
我很少使用 json,所以如果我没有正确命名所有名称,我很抱歉。
我有一个预定义的 json 字符串,其中包含大量点(x,y;整数),这些点包含在“值”中。 每个点都是 JSON 中 2 个值的列表。
剥离到主要内容 json 字符串如下所示:
{"values":[[3621,67],[445,117]],"more_key":"move_value","much_more_key":"much_move_value"}
我的 go 工作是这样的:
public class RootObject
{
public List<int[]> values { get; set; }
public string more_key { get; set; }
public string much_more_key { get; set; }
}
使用以下行反序列化(并在稍后序列化):
_rootObject = JsonConvert.DeserializeObject<RootObject>(jsonString);
...
JsonConvert.SerializeObject(_rootObject);
但我不想要 int arrays 的列表。 我想获得(点)对象的列表。 我想要工作的是这样的:
public class RootObject
{
public List<MyPoint> values { get; set; }
public string more_key { get; set; }
public string much_more_key { get; set; }
}
public class MyPoint
{
public int x;
public int y;
// more member variables not from json
public bool notFromJSON;
}
到目前为止,我还没有找到实现这一目标的方法。
在反序列化和序列化之间想对这个 MyPoint 列表做一些工作,并且需要这个 class 中的其他成员。
任何提示如何做到这一点将不胜感激。
感谢 Brian Rogers 和 Omar Abdel Bari 为我指明了正确的方向。
我需要编写一个 JsonConverter (如此处所述:使用 Json.NET 使用混合类型对 arrays 进行序列化/反序列化),而不是立即工作。
public class RootObject
{
public List<MyPoint> values { get; set; }
public string more_key { get; set; }
public string much_more_key { get; set; }
}
[JsonConverter(typeof(MyPointConverter))]
public class MyPoint
{
public int X;
public int Y;
// more member variables not from json
public bool notFromJSON;
public MyPoint()
{
X = -1;
Y = -1;
}
}
class MyPointConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(MyPoint));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JArray ja = JArray.Load(reader);
MyPoint myPoint = new MyPoint();
myPoint.X = (int)ja[0];
myPoint.Y = (int)ja[1];
return myPoint;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
JArray ja = new JArray();
MyPoint myPoint = (MyPoint)value;
ja.Add(myPoint.X);
ja.Add(myPoint.Y);
ja.WriteTo(writer);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.