Created
July 27, 2020 10:35
-
-
Save wakeup5/e2f2b1de74097f611da630c94fcba482 to your computer and use it in GitHub Desktop.
특이한 뒤끝서버 Json 구조를 Object로 바로 파싱하는 코드(차트만 사용 가능). Newtonsoft.Json 라이브러리를 이용해 사용
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static class BackEndJsonUtility | |
{ | |
public static readonly JsonConverter[] BackEndJsonConverters = | |
{ | |
new ObjectToIntConverter(), | |
new ObjectToFloatConverter(), | |
new ObjectToDoubleConverter(), | |
new ObjectToStringConverter() | |
}; | |
private class ObjectToIntConverter : JsonConverter | |
{ | |
public override bool CanWrite => false; | |
public override bool CanConvert(Type objectType) | |
{ | |
return objectType == typeof(int); | |
} | |
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) | |
{ | |
var o = serializer.Deserialize<TypeValue>(reader); | |
var sValue = o.S?.ToString(); | |
if (!string.IsNullOrEmpty(sValue) && | |
int.TryParse(sValue, out var value)) | |
{ | |
return value; | |
} | |
return 0; | |
} | |
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) | |
{ | |
throw new NotImplementedException(); | |
} | |
} | |
private class ObjectToFloatConverter : JsonConverter | |
{ | |
public override bool CanWrite => false; | |
public override bool CanConvert(Type objectType) | |
{ | |
return objectType == typeof(float); | |
} | |
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) | |
{ | |
var o = serializer.Deserialize<TypeValue>(reader); | |
var sValue = o.S?.ToString(); | |
if (!string.IsNullOrEmpty(sValue) && | |
float.TryParse(sValue, out var value)) | |
{ | |
return value; | |
} | |
return 0f; | |
} | |
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) | |
{ | |
throw new NotImplementedException(); | |
} | |
} | |
private class ObjectToDoubleConverter : JsonConverter | |
{ | |
public override bool CanWrite => false; | |
public override bool CanConvert(Type objectType) | |
{ | |
return objectType == typeof(double); | |
} | |
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) | |
{ | |
var o = serializer.Deserialize<TypeValue>(reader); | |
var sValue = o.S?.ToString(); | |
if (!string.IsNullOrEmpty(sValue) && | |
double.TryParse(sValue, out var value)) | |
{ | |
return value; | |
} | |
return 0d; | |
} | |
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) | |
{ | |
throw new NotImplementedException(); | |
} | |
} | |
private class ObjectToStringConverter : JsonConverter | |
{ | |
public override bool CanWrite => false; | |
public override bool CanConvert(Type objectType) | |
{ | |
return objectType == typeof(string); | |
} | |
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) | |
{ | |
var o = serializer.Deserialize<TypeValue>(reader); | |
var sValue = o.S?.ToString(); | |
if (!string.IsNullOrEmpty(sValue)) | |
{ | |
return o.S; | |
} | |
return null; | |
} | |
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) | |
{ | |
throw new NotImplementedException(); | |
} | |
} | |
private struct TypeValue | |
{ | |
public object S; | |
public object NULL; | |
} | |
} | |
[System.Serializable] | |
public class Rows<T> | |
{ | |
public List<T> rows; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Json 구조 | |
{ | |
"rows": [ | |
{ | |
"index": { | |
"S": "10000" | |
}, | |
"Name": { | |
"S": "이름" | |
}, | |
"Description": { | |
"S": "구조가 왜 이래" | |
} | |
}, | |
... | |
] | |
} | |
*/ | |
using Newtonsoft.Json; | |
public List<Item> Parse(string json) | |
{ | |
var obj = JsonConvert.DeserializeObject<Row<Item>>(json, BackEndJsonUtility.BackEndJsonConverters); | |
return obj.rows; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment