代码之家  ›  专栏  ›  技术社区  ›  Jarryd

为什么JSON保存格式在windows平台之间发生变化

  •  1
  • Jarryd  · 技术社区  · 7 年前

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

    桌面Seralizer的结果:

    "SizeRelative": "384, 64",
    

    使用Newtonsoft Json。净值,10.0.3

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Daniel Armstrong    7 年前

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

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

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