gpt4 book ai didi

.net - JSON.NET 序列化问题

转载 作者:行者123 更新时间:2023-12-04 02:13:16 24 4
gpt4 key购买 nike

我有一个属性类型为 Point 的类(.NET Framework 中的 struct )。
我使用 Newton.Json 中的 JsonConvert 将其序列化为 JSON。
但结果是

 "Point" : "100,100" 

代替
 "Point" : { X: "100", Y: "100"}

当我用标准的 JavascriptSerializer 替换 JsonConvert 时,
一切正常。

但我想使用来自 JSON.Net 的 JsonConverter,因为它要快得多。

最佳答案

那是因为 Point已经定义了自己的 TypeConverter JSON.NET 使用它来进行序列化。我不确定是否有一种干净的方法可以关闭此行为,但您当然可以创建自己的 JsonConverter它的行为方式与您想要的一样:

class PointConverter : JsonConverter
{
public override void WriteJson(
JsonWriter writer, object value, JsonSerializer serializer)
{
var point = (Point)value;

serializer.Serialize(
writer, new JObject { { "X", point.X }, { "Y", point.Y } });
}

public override object ReadJson(
JsonReader reader, Type objectType, object existingValue,
JsonSerializer serializer)
{
var jObject = serializer.Deserialize<JObject>(reader);

return new Point((int)jObject["X"], (int)jObject["Y"]);
}

public override bool CanConvert(Type objectType)
{
return objectType == typeof(Point);
}
}

然后你可以像这样使用它:
JsonConvert.SerializeObject(
new { Point = new Point(15, 12) },
new PointConverter())

关于.net - JSON.NET 序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9750836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com