最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

自定義實現(xiàn)Json字符串向C#對象轉(zhuǎn)變的方法

 更新時間:2013年03月19日 11:03:18   作者:  
自定義實現(xiàn)Json字符串向C#對象轉(zhuǎn)變的方法,需要的朋友可以參考一下

這里使用Atrribute的方式實現(xiàn)了Json字符串向C#對象的轉(zhuǎn)變。因為功能局限,此版本只是針對于Json字符串,如"response":"Hello","id":21231513,"result":100,"msg":"OK."; 而不是Json數(shù)組。這里的Atrribute是作用在屬性上,像NHibernate中的Atrribute一樣,是在運行時通過反射來獲取這個屬性對應(yīng)于Json字符串中的哪個key.

復(fù)制代碼 代碼如下:

namespace JsonMapper
{
    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
    public class JsonFieldAttribute : Attribute
    {
        private string _Name = string.Empty;

        public string Name
        {
            get { return _Name; }
            set { _Name = value; }
        }
    }
}


接下來是這個轉(zhuǎn)換工具中的核心代碼,主要是分解并且分析Json字符串中key與value, 并且通過反射獲得對象中的各個對應(yīng)屬性并且賦值。
復(fù)制代碼 代碼如下:

namespace JsonMapper
{
    public class JsonToInstance
    {
        public T ToInstance<T>(string json) where T : new()
        {
            Dictionary<string, string> dic = new Dictionary<string, string>();
            string[] fields = json.Split(',');
            for (int i = 0; i < fields.Length; i++ )
            {
                string[] keyvalue = fields[i].Split(':');
                dic.Add(Filter(keyvalue[0]), Filter(keyvalue[1]));
            }

            PropertyInfo[] properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);

            T entity = new T();
            foreach (PropertyInfo property in properties)
            {
                object[] propertyAttrs = property.GetCustomAttributes(false);
                for (int i = 0; i < propertyAttrs.Length; i++)
                {
                    object propertyAttr = propertyAttrs[i];
                    if (propertyAttr is JsonFieldAttribute)
                    {
                        JsonFieldAttribute jsonFieldAttribute = propertyAttr as JsonFieldAttribute;
                        foreach (KeyValuePair<string ,string> item in dic)
                        {
                            if (item.Key == jsonFieldAttribute.Name)
                            {
                                Type t = property.PropertyType;
                                property.SetValue(entity, ToType(t, item.Value), null);
                                break;
                            }
                        }
                    }
                }
            }
            return entity;
        }

        private string Filter(string str)
        {
            if (!(str.StartsWith("\"") && str.EndsWith("\"")))
            {
                return str;
            }
            else
            {
                return str.Substring(1, str.Length - 2);
            }
        }

        public object ToType(Type type, string value)
        {
            if (type == typeof(string))
            {
                return value;
            }

            MethodInfo parseMethod = null;

            foreach (MethodInfo mi in type.GetMethods(BindingFlags.Static
                | BindingFlags.Public))
            {
                if (mi.Name == "Parse" && mi.GetParameters().Length == 1)
                {
                    parseMethod = mi;
                    break;
                }
            }

            if (parseMethod == null)
            {
                throw new ArgumentException(string.Format(
                    "Type: {0} has not Parse static method!", type));
            }

            return parseMethod.Invoke(null, new object[] { value });
        }
    }
}

最后這是用于測試的代碼

復(fù)制代碼 代碼如下:

public class Message
    {
        //{ "result": 100, "response": "Who are you?!", "id": 13185569, "msg": "OK." }

        [JsonField(Name = "result")]
        public int Result { get; set; }

        [JsonField(Name = "response")]
        public string Response { get; set; }

        [JsonField(Name = "id")]
        public int Id { get; set; }

        [JsonField(Name = "msg")]
        public string Msg { get; set; }
    }

復(fù)制代碼 代碼如下:

class Program
    {
        static void Main(string[] args)
        {
            JsonToInstance util = new JsonToInstance();
            string json = "\"response\":\"我是阿貓醬的小黃雞\",\"id\":21231513,\"result\":100,\"msg\":\"OK.\"";
            Message m = util.ToInstance<Message>(json);
        }
    }

相關(guān)文章

  • C#編程自學(xué)之運算符和表達式

    C#編程自學(xué)之運算符和表達式

    這篇文章主要介紹了C#運算符和表達式,這是自學(xué)C#編程的第五篇,希望對大家的學(xué)習(xí)有所幫助。
    2015-10-10
  • vs 中C#項目讀取JSON配置文件的方法

    vs 中C#項目讀取JSON配置文件的方法

    這篇文章主要介紹了vs中 C#項目讀取JSON配置文件的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • C#中的where泛型約束介紹

    C#中的where泛型約束介紹

    這個關(guān)于泛型約束的東西我看了幾天了。一直沒打看懂,我的領(lǐng)悟能力有點差,剛才突然明白了一點
    2013-04-04
  • C#實現(xiàn)數(shù)獨解法

    C#實現(xiàn)數(shù)獨解法

    這篇文章介紹了C#實現(xiàn)數(shù)獨解法的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C# PropertyGrid使用案例詳解

    C# PropertyGrid使用案例詳解

    這篇文章主要介紹了C# PropertyGrid使用案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C#中增強類功能的幾種方式詳解

    C#中增強類功能的幾種方式詳解

    這篇文章主要給大家介紹了關(guān)于C#中增強類功能的幾種方式的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • 基于C#?實現(xiàn)劉謙春晚魔術(shù)(示例代碼)

    基于C#?實現(xiàn)劉謙春晚魔術(shù)(示例代碼)

    劉謙春晚魔術(shù)是一個讓人嘆為觀止的魔術(shù)表演,其中涉及到了數(shù)學(xué)、編程和創(chuàng)意的結(jié)合,看了春晚魔術(shù)的朋友們,是不是好奇春晚劉謙的魔術(shù)是怎么變的,本文分享C#?實現(xiàn)劉謙春晚魔術(shù)示例代碼,一起看看吧
    2024-02-02
  • C#操作SQLite數(shù)據(jù)庫方法小結(jié)

    C#操作SQLite數(shù)據(jù)庫方法小結(jié)

    這篇文章介紹了C#操作SQLite數(shù)據(jù)庫的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • WPF實現(xiàn)動畫效果(六)之路徑動畫

    WPF實現(xiàn)動畫效果(六)之路徑動畫

    這篇文章介紹了WPF實現(xiàn)動畫效果之路徑動畫,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C#實現(xiàn)程序單例日志輸出功能

    C#實現(xiàn)程序單例日志輸出功能

    這篇文章主要為大家詳細介紹了C#實現(xiàn)程序單例日志輸出功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評論

乌恰县| 麻江县| 天长市| 裕民县| 肥东县| 西吉县| 靖州| 饶阳县| 梅州市| 义乌市| 新竹县| 电白县| 洪江市| 宁安市| 鸡西市| 将乐县| 乐业县| 五寨县| 灵丘县| 沿河| 淄博市| 马鞍山市| 西安市| 建始县| 澜沧| 南开区| 彭山县| 贺州市| 济南市| 塔城市| 延长县| 孙吴县| 镇远县| 扎兰屯市| 剑阁县| 辽阳市| 嘉禾县| 高青县| 布拖县| 固阳县| 荣成市|