【问题标题】:Why is the JSON save format changing between windows platforms为什么 Windows 平台之间的 JSON 保存格式会发生变化
【发布时间】:2017-11-29 03:21:34
【问题描述】:

我有一个结构 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;
}

序列化

这个结构是一个类的一部分,也就是一个集合的一部分。此代码包含在两个平台上,并在两个平台上运行。

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

为什么输出不同? 为什么一个不能加载另一个?

【问题讨论】:

  • 能否也提供序列化代码?
  • 为什么输出不同?可能是因为您的Vector2 有一个关联的TypeConverter 未在您的问题中显示。请参阅 Newtonsoft.JSON cannot convert model with TypeConverter attribute 了解为什么这很重要。
  • 此外,我相信,即使在 Json.NET 中,使用关联的 TypeConverter 进行序列化的支持最初仅在 .Net 完整框架构建中可用。对于 .Net 核心(以及我认为的 UWP),它将在 下一个 版本中添加,如 .NET Standard 2.0 #1423 中所述。因此,如果您在 UWP 和桌面上都使用 Json.NET,这可能会解释不一致。
  • @dbc 我添加了其他信息。您对 typeconverter 属性也是正确的,删除​​它后,我现在可以加载 UWP 构建生成的 JSON。直到现在我才明白它是否相关。

标签: c# .net json uwp monogame


【解决方案1】:

JSON.NET 使用关联的 TypeConverter,如果它在类/结构上可用,这最初仅在 .Net 完整框架中可用。

对于 .Net core 和 UWP,它将在下一个版本中添加,作为 .NET Standard 2.0 的一部分,因此如果您在 UWP 和桌面上都使用 Json.NET,这可能就是问题所在。

检查您的类/结构上的 TypeConverter。删除它应该会使 JSON.NET 回退到默认的序列化程序,这可能是您在 UWP 构建中得到的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 2023-04-01
    • 2020-09-13
    • 2020-07-14
    • 2019-07-17
    • 2017-09-28
    相关资源
    最近更新 更多