C# Json 解析,針對數字開頭變量Json字符串轉模型(Model)

namespace 解析數字開頭的變量JSON
{
    class Program
    {
        static void Main(string[] args)
        {
            string strJson = "{\"1st_attempt\":\"2021-02-09 16:32:15\",\"2nd_attempt\":\"2021-02-09 16:33:18\"}";
            var objModel = JsonDictionaryModel<ResModels>(strJson);
        }
 
        public class ResModels
        {
            public string _1st_attempt { get; set; }
            public string _2nd_attempt { get; set; }
        }


        public static T JsonDictionaryModel<T>(string strJson) 
        {
            Dictionary<string, object> ProductDetailList = JsonConvert.DeserializeObject<Dictionary<string, object>>(strJson);
            return ParseDictionaryToModel<T>(ProductDetailList);
        }
        public static T ParseDictionaryToModel<T>(Dictionary<string, object> dict)
        {
            T obj = default(T);
            obj = Activator.CreateInstance<T>();
            //根據Key值設定 Columns
            foreach (KeyValuePair<string, object> item in dict)
            {
                PropertyInfo prop = obj.GetType().GetProperty(item.Key);
                if (Equals(prop, null)) 
                {
                    prop = obj.GetType().GetProperty("_"+item.Key);
                }
                if (!Equals(item.Value,null))
                {
                    object value = item.Value;
                    //Nullable 獲取Model類字段的真實類型
                    Type itemType = Nullable.GetUnderlyingType(prop.PropertyType) == null ? prop.PropertyType : Nullable.GetUnderlyingType(prop.PropertyType);
                    //根據Model類字段的真實類型進行轉換
                    prop.SetValue(obj, Convert.ChangeType(value, itemType), null);
                }
            }
            return obj;
        }
    }
}

 https://www.cnblogs.com/volts0302/p/5195086.htmlhtml

https://blog.csdn.net/weixin_33853794/article/details/92936314優化

 

改進版:spa

public static T JsonDictionaryModel<T>(string strJson)
        {
            Dictionary<string, object> ProductDetailList = JsonConvert.DeserializeObject<Dictionary<string, object>>(strJson);
            return ParseDictionaryToModel<T>(ProductDetailList);
        }
        public static T ParseDictionaryToModel<T>(Dictionary<string, object> dict)
        {
            T objModel = Activator.CreateInstance<T>();
            foreach (KeyValuePair<string, object> item in dict)
            {
                PropertyInfoMethod(objModel, item.Key, item.Value);
            }
            return objModel;
        }
//這裏實在想不到辦法優化了
public static void PropertyInfoMethod(object objModel, string keyName, object objValue) { PropertyInfo prop = objModel.GetType().GetProperty(keyName) ?? objModel.GetType().GetProperty("_" + keyName); if (!Equals(null, prop)&&!Equals(null, objValue)) prop.SetValue(objModel, Convert.ChangeType(objValue, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType), null); }
相關文章
相關標籤/搜索