2017-11-29 3 views
1

JSON에 직렬화되면 다른 플랫폼에서 다른 출력이 생성되는 구조체 Vector2가 있습니다.Windows 플랫폼간에 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; 
} 

직렬화, 즉 모음의 일부입니다. 이 코드는 두 플랫폼 모두에 포함되어 있으며 두 플랫폼 모두에서 실행됩니다. UWP 시리얼에서

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); 
    } 

결과 :

"SizeRelative": { 
     "X": 224.0, 
     "Y": 63.9999847 
    }, 

결과 데스크톱에서 Seralizer : Newtonsoft Json.net를 사용

"SizeRelative": "384, 64", 

, 10.0.3

가 왜 출력이 다르다. 엔트? 왜 다른 하나를로드 할 수 있습니까?

+1

직렬화 코드도 제공 할 수 있습니까? – mehran

+2

* 출력이 다른 이유는 무엇입니까? * 아마도 귀하의 'Vector2'에 관련 'TypeConverter'이 귀하의 질문에 나타나지 않았기 때문일 수 있습니다. 이 문제가 발생하는 이유는 [Newtonsoft.JSON이 TypeConverter 특성을 가진 모델을 변환 할 수 없음] (https://stackoverflow.com/q/31325866/3744182)을 참조하십시오. – dbc

+1

또한, Json.NET 내에서도 연관된'TypeConverter'를 사용한 직렬화 지원은 원래 .Net 전체 프레임 워크 빌드에서만 사용할 수있었습니다. .Net 코어 (및 UWP)에 대해서는 [.NET 표준 2.0 # 1423] (https://github.com/JamesNK/Newtonsoft.Json/issues)에서 설명한대로 ** 다음 ** 릴리스에 추가됩니다./1423). 따라서 UWP와 데스크톱 모두에서 Json.NET을 사용한다면 불일치를 설명 할 수 있습니다. – dbc

답변

1

JSON.NET은 관련된 모든 TypeConverter를 클래스/구조체에서 사용할 수있는 경우이를 사용합니다.이 기능은 원래 .Net 전체 프레임 워크에서만 사용할 수있었습니다.

.Net 코어 및 UWP의 경우 .NET Standard 2.0의 일부로 다음 릴리스에 추가 될 예정입니다. 따라서 UWP 및 데스크톱에서 Json.NET을 사용하는 경우 이것이 문제 일 수 있습니다.

클래스/구조체에 TypeConverter가 있는지 확인하십시오. 그것을 제거하면 JSON.NET이 UWP 빌드에서 얻고있는 기본 시리얼 라이저로 폴백되어야한다.

관련 문제