11using System ;
2- using System . Text . Json ;
3- using System . Text . Json . Serialization ;
2+ using System . Collections . Generic ;
43
54namespace UnityLauncherPro
65{
76 public class UnityVersion
87 {
9- [ JsonPropertyName ( "version" ) ]
108 public string Version { get ; set ; }
11- [ JsonPropertyName ( "stream" ) ]
12- [ JsonConverter ( typeof ( UnityVersionStreamConverter ) ) ]
139 public UnityVersionStream Stream { get ; set ; }
14- [ JsonPropertyName ( "releaseDate" ) ]
1510 public DateTime ReleaseDate { get ; set ; }
16- }
17-
18- public class UnityVersionStreamConverter : JsonConverter < UnityVersionStream >
19- {
20- public override UnityVersionStream Read ( ref Utf8JsonReader reader , Type typeToConvert , JsonSerializerOptions options )
11+
12+ public static UnityVersion FromJson ( string json )
2113 {
22- string streamString = reader . GetString ( ) ;
23- if ( Enum . TryParse < UnityVersionStream > ( streamString , true , out var result ) )
14+ var values = ParseJsonToDictionary ( json ) ;
15+
16+ return new UnityVersion
2417 {
25- return result ;
18+ Version = values . ContainsKey ( "version" ) ? values [ "version" ] : null ,
19+ Stream = ParseStream ( values . ContainsKey ( "stream" ) ? values [ "stream" ] : null ) ,
20+ ReleaseDate = DateTime . TryParse ( values . ContainsKey ( "releaseDate" ) ? values [ "releaseDate" ] : null , out var date )
21+ ? date
22+ : default
23+ } ;
24+ }
25+
26+ public string ToJson ( )
27+ {
28+ return $ "{{ \" version\" : \" { Version } \" , \" stream\" : \" { Stream } \" , \" releaseDate\" : \" { ReleaseDate : yyyy-MM-ddTHH:mm:ss} \" }}";
29+ }
30+
31+ private static Dictionary < string , string > ParseJsonToDictionary ( string json )
32+ {
33+ var result = new Dictionary < string , string > ( ) ;
34+ json = json . Trim ( new char [ ] { '{' , '}' , ' ' } ) ;
35+ var keyValuePairs = json . Split ( new [ ] { ',' } , StringSplitOptions . RemoveEmptyEntries ) ;
36+
37+ foreach ( var pair in keyValuePairs )
38+ {
39+ var keyValue = pair . Split ( new [ ] { ':' } , 2 ) ;
40+ if ( keyValue . Length == 2 )
41+ {
42+ var key = keyValue [ 0 ] . Trim ( new char [ ] { ' ' , '"' } ) ;
43+ var value = keyValue [ 1 ] . Trim ( new char [ ] { ' ' , '"' } ) ;
44+ result [ key ] = value ;
45+ }
2646 }
27- throw new JsonException ( $ "Unable to convert \" { streamString } \" to UnityVersionStream") ;
47+
48+ return result ;
2849 }
2950
30- public override void Write ( Utf8JsonWriter writer , UnityVersionStream value , JsonSerializerOptions options )
51+ private static UnityVersionStream ParseStream ( string stream )
3152 {
32- writer . WriteStringValue ( value . ToString ( ) . ToUpper ( ) ) ;
53+ return Enum . TryParse ( stream , true , out UnityVersionStream result ) ? result : UnityVersionStream . Tech ;
3354 }
3455 }
35- }
56+ }
0 commit comments