1
1
using System ;
2
- using System . Text . Json ;
3
- using System . Text . Json . Serialization ;
2
+ using System . Collections . Generic ;
4
3
5
4
namespace UnityLauncherPro
6
5
{
7
6
public class UnityVersion
8
7
{
9
- [ JsonPropertyName ( "version" ) ]
10
8
public string Version { get ; set ; }
11
- [ JsonPropertyName ( "stream" ) ]
12
- [ JsonConverter ( typeof ( UnityVersionStreamConverter ) ) ]
13
9
public UnityVersionStream Stream { get ; set ; }
14
- [ JsonPropertyName ( "releaseDate" ) ]
15
10
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 )
21
13
{
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
24
17
{
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
+ }
26
46
}
27
- throw new JsonException ( $ "Unable to convert \" { streamString } \" to UnityVersionStream") ;
47
+
48
+ return result ;
28
49
}
29
50
30
- public override void Write ( Utf8JsonWriter writer , UnityVersionStream value , JsonSerializerOptions options )
51
+ private static UnityVersionStream ParseStream ( string stream )
31
52
{
32
- writer . WriteStringValue ( value . ToString ( ) . ToUpper ( ) ) ;
53
+ return Enum . TryParse ( stream , true , out UnityVersionStream result ) ? result : UnityVersionStream . Tech ;
33
54
}
34
55
}
35
- }
56
+ }
0 commit comments