Skip to content

Instantly share code, notes, and snippets.

@wakeup5
Created July 27, 2020 10:35
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wakeup5/e2f2b1de74097f611da630c94fcba482 to your computer and use it in GitHub Desktop.
Save wakeup5/e2f2b1de74097f611da630c94fcba482 to your computer and use it in GitHub Desktop.
특이한 뒤끝서버 Json 구조를 Object로 바로 파싱하는 코드(차트만 사용 가능). Newtonsoft.Json 라이브러리를 이용해 사용
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;
}
/*
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