■ 다양한 타입의 JSON 직렬화 데이터 저장하기/복구하기

----------------------------------------------------------------------------------------------------

using System;

using System.Reflection;

 

/// <summary>

/// JSON 항목

/// </summary>

public class JSONItem

{

    //////////////////////////////////////////////////////////////////////////////////////////////////// Property

    ////////////////////////////////////////////////////////////////////////////////////////// Public

 

    #region 타입 - Type

 

    /// <summary>

    /// 타입

    /// </summary>

    public Type Type { get; set; }

 

    #endregion

    #region JSON - JSON

 

    /// <summary>

    /// JSON

    /// </summary>

    public string JSON { get; set; }

 

    #endregion

}

 

#region JSON 항목 구하기 - GetJSONItem(sourceObject)

 

/// <summary>

/// JSON 항목 구하기

/// </summary>

/// <param name="sourceObject">소스 객체</param>

/// <returns>JSON 항목</returns>

public JSONItem GetJSONItem(object sourceObject)

{

    if(sourceObject == null)

    {

        return null;

    }

 

    Type sourceType = sourceObject.GetType();

 

    MethodInfo method = typeof(Newtonsoft.Json.JsonConvert).GetMethods().First

    (

        m => m.Name == "SerializeObject"   &&

             m.GetParameters().Length == 1 &&

             m.IsStatic                    &&

             m.GetParameters()[0].ParameterType == typeof(object)

    );

 

    string json = method.Invoke(null, new[] { sourceObject }) as string;

 

    JSONItem jsonItem = new JSONItem() { Type = sourceType, JSON = json };

 

    return jsonItem;

}

 

#endregion

#region 객체 구하기 - GetObject(jsonItem)

 

/// <summary>

/// 객체 구하기

/// </summary>

/// <param name="jsonItem">JSON 항목</param>

/// <returns>객체</returns>

public object GetObject(JSONItem jsonItem)

{

    MethodInfo method1 = typeof(Newtonsoft.Json.JsonConvert).GetMethods().First

    (

        m => m.Name == "DeserializeObject" &&

             m.GetParameters().Length == 1 &&

             m.IsStatic                    &&

             m.IsGenericMethodDefinition   &&

             m.GetParameters()[0].ParameterType == typeof(string)

    );

 

    MethodInfo method2 = method1.MakeGenericMethod(new[] { jsonItem.Type });

 

    return method2.Invoke(null, new[] { jsonItem.JSON });

}

 

#endregion

----------------------------------------------------------------------------------------------------

※ 비주얼 스튜디오 NuGet 패키지 관리에서 Newtonsoft.Json을 설치한다.

Posted by 사용자 icodebroker
TAG