为什么 JSON 保存格式在 windows 平台之间变化
Why is the JSON save format changing between windows platforms
我有一个结构 Vector2,当它序列化为 JSON 时会在不同的平台上产生不同的输出。
我正在序列化的结构:
#if XNADESIGNPROVIDED
[System.ComponentModel.TypeConverter(typeof(Microsoft.Xna.Framework.Design.Vector2TypeConverter))]
#endif
[DataContract]
[DebuggerDisplay("{DebugDisplayString,nq}")]
[DebuggerStepThrough]
public struct Vector2 : IEquatable<Vector2>
{
[DataMember]
public float X;
[DataMember]
public float Y;
}
序列化
此结构是 class 的一部分,即集合的一部分。此代码包含在两个平台上,运行 在两个平台上。
private static readonly JsonSerializerSettings JsonSerializerSettings = new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore };
public string ToJson()
{
return JsonConvert.SerializeObject(this, JsonSerializerSettings);
}
public static MenuEntryCollection FromJson(string in_Data)
{
return JsonConvert.DeserializeObject<MenuEntryCollection>(in_Data);
}
UWP 序列化程序的结果:
"SizeRelative": {
"X": 224.0,
"Y": 63.9999847
},
Desktop Seralizer 的结果:
"SizeRelative": "384, 64",
使用 Newtonsoft Json.net、10.0.3
为什么输出不同?
为什么一个不能加载另一个?
JSON.NET 使用关联的 TypeConverter(如果在 class/struct 上可用),这最初仅在 .Net 完整框架中可用。
对于 .Net 核心和 UWP,它将在下一个版本中添加,作为 .NET Standard 2.0 的一部分,因此如果您在 UWP 和桌面中都使用 Json.NET,这可能就是问题所在.
检查 class/struct 上的 TypeConverter。删除它应该 JSON.NET 回退到默认序列化程序,这可能是您在 UWP 构建中获得的。
我有一个结构 Vector2,当它序列化为 JSON 时会在不同的平台上产生不同的输出。
我正在序列化的结构:
#if XNADESIGNPROVIDED
[System.ComponentModel.TypeConverter(typeof(Microsoft.Xna.Framework.Design.Vector2TypeConverter))]
#endif
[DataContract]
[DebuggerDisplay("{DebugDisplayString,nq}")]
[DebuggerStepThrough]
public struct Vector2 : IEquatable<Vector2>
{
[DataMember]
public float X;
[DataMember]
public float Y;
}
序列化
此结构是 class 的一部分,即集合的一部分。此代码包含在两个平台上,运行 在两个平台上。
private static readonly JsonSerializerSettings JsonSerializerSettings = new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore };
public string ToJson()
{
return JsonConvert.SerializeObject(this, JsonSerializerSettings);
}
public static MenuEntryCollection FromJson(string in_Data)
{
return JsonConvert.DeserializeObject<MenuEntryCollection>(in_Data);
}
UWP 序列化程序的结果:
"SizeRelative": {
"X": 224.0,
"Y": 63.9999847
},
Desktop Seralizer 的结果:
"SizeRelative": "384, 64",
使用 Newtonsoft Json.net、10.0.3
为什么输出不同? 为什么一个不能加载另一个?
JSON.NET 使用关联的 TypeConverter(如果在 class/struct 上可用),这最初仅在 .Net 完整框架中可用。
对于 .Net 核心和 UWP,它将在下一个版本中添加,作为 .NET Standard 2.0 的一部分,因此如果您在 UWP 和桌面中都使用 Json.NET,这可能就是问题所在.
检查 class/struct 上的 TypeConverter。删除它应该 JSON.NET 回退到默认序列化程序,这可能是您在 UWP 构建中获得的。