저는 C# 개발을 할때 json 라이브러리는 Litjson을 주로 사용합니다.
편하게 사용하기 위해서 정적 클래스 하나 만드러서 사용하다가 이번에는 익스텐션을 만들어 보았습니다.
확실히 편하게 사용할 수 있는 부분은 찾아보는 것이 좋은것 같습니다.
사용하는 litjson 라이브러는 0.17.0 버전입니다. 이전이나 이후도 별 상관은 없을것 같네요.
dotnet6로 만든 소스구요 null에 대한부분 ? 없애는 정도면 되지 않을까 싶네요.
사용법은
JsonData jd;
jd.GetInt();
jd.GetString();
아래 소스를 보시면 아시겠지만 어떻게든 값을 얻어옵니다.
타입 체크가 필요하면 하고 하면 될것이구요.
IsNumber의 경우 숫자 형태가 너무 많아서 추가했습니다.
필요한 것이 있으면 더 추가하면 될것이구요.
하여간 도움이 되면 좋겠습니다~
파일을 올릴수가 없네요.
소스입니다.
namespace LitJson
{
internal static class LitjsonExtension
{
public static bool IsNumber(this JsonData jd)
{
switch (jd.GetJsonType())
{
case JsonType.Int:
case JsonType.Long:
case JsonType.Double: return true;
default: return false;
}
}
public static bool GetBool(this JsonData jd)
{
if (jd == null) return false;
switch (jd.GetJsonType())
{
case JsonType.String: return Convert.ToBoolean((string)jd);
case JsonType.Int: return Convert.ToBoolean((int)jd);
case JsonType.Long: return Convert.ToBoolean((long)jd);
case JsonType.Double: return Convert.ToBoolean((double)jd);
case JsonType.Boolean: return (bool)jd;
case JsonType.None:
case JsonType.Object:
case JsonType.Array:
default: return false;
}
}
public static int GetInt(this JsonData jd)
{
if (jd == null) return 0;
switch (jd.GetJsonType())
{
case JsonType.String: return Convert.ToInt32((string)jd);
case JsonType.Int: return (int)jd;
case JsonType.Long: return Convert.ToInt32((long)jd);
case JsonType.Double: return Convert.ToInt32((double)jd);
case JsonType.Boolean: return Convert.ToInt32((bool)jd);
case JsonType.None:
case JsonType.Object:
case JsonType.Array:
default: return 0;
}
}
public static long GetLong(this JsonData jd)
{
if (jd == null) return 0;
switch (jd.GetJsonType())
{
case JsonType.String: return Convert.ToInt64((string)jd);
case JsonType.Int: return Convert.ToInt64((int)jd);
case JsonType.Long: return (long)jd;
case JsonType.Double: return Convert.ToInt64((double)jd);
case JsonType.Boolean: return Convert.ToInt64((bool)jd);
case JsonType.None:
case JsonType.Object:
case JsonType.Array:
default: return 0;
}
}
public static double GetDouble(this JsonData jd)
{
if (jd == null) return 0;
switch (jd.GetJsonType())
{
case JsonType.String: return Convert.ToDouble((string)jd);
case JsonType.Int: return Convert.ToDouble((int)jd);
case JsonType.Long: return Convert.ToDouble((long)jd);
case JsonType.Double: return (double)jd;
case JsonType.Boolean: return Convert.ToDouble((bool)jd);
case JsonType.None:
case JsonType.Object:
case JsonType.Array:
default: return 0;
}
}
public static string? GetString(this JsonData jd)
{
if (jd == null) return null;
switch (jd.GetJsonType())
{
case JsonType.Object:
case JsonType.Array: return jd.ToJson();
case JsonType.String: return (string)jd;
case JsonType.Int: return Convert.ToString((int)jd);
case JsonType.Long: return Convert.ToString((long)jd);
case JsonType.Double: return Convert.ToString((double)jd);
case JsonType.Boolean: return Convert.ToString((bool)jd);
case JsonType.None:
default: return null;
}
}
}
}