1 頁 (共 1 頁)

JsonToObject & ObjectToJson (.Net Framework 2.0)

發表於 : 週二 11月 08, 2011 1:23 pm
rusli
重點放在 Activator.CreateInstance<T>
建構在 .Net Framework 2.0 前提下

代碼: 選擇全部


void main()
{
    string result = "{\"c\":\"4E3F1DE7BC0EA9681C6FB66F7D8F2A5E376DBD93A1667899\",\"s\":\"SYcMFLsk6LRlliK2ShrV2bYx+S0mF9zVUBU4ZRnv78w=\",\"msg\":\"Success\"}";
    ChallengeResult ChallengeData = Util.JsonToObject<ChallengeResult>(result);
    string jsonResult = Util.ObjectToJson<ChallengeResult>(ChallengeData);

    ChallengeResult[] nc = new ChallengeResult[] { new ChallengeResult() { Account = "abc", Password = "def" } };
    string arrayJsonResult = Util.ArrayObjectToJson<ChallengeResult>(nc);
}



代碼: 選擇全部

  public class Util
    {
        public static string ArrayObjectToJson<T>(T[] t)
        {
            System.Text.StringBuilder Json = new System.Text.StringBuilder();
            string tag = "\"{0}\":\"{1}\"";
            Json.Append("[");
            for (int j = 0; j < t.Length; j++)
            {
                Json.Append("{");
                PropertyInfo[] pI = (t[j]).GetType().GetProperties();
                for (int i = 0; i < pI.Length; i++)
                {
                    PropertyInfo o = pI[i];
                    Json.Append(string.Format(tag, o.Name, o.GetValue(t[j], null)));
                    if (i != pI.Length - 1)
                    {
                        Json.Append(",");
                    }
                }
                Json.Append("}");

                if (j != t.Length - 1)
                {
                    Json.Append(",");
                }
            }
            Json.Append("]");
            return Json.ToString();
        }

        public static string ObjectToJson<T>(T t)
        {
            System.Text.StringBuilder Json = new System.Text.StringBuilder();
            PropertyInfo[] pI = (t).GetType().GetProperties();
            string tag = "\"{0}\":\"{1}\"";
            Json.Append("{");
            for (int i = 0; i < pI.Length; i++ )
            {
                PropertyInfo o = pI[i];
                Json.Append(string.Format(tag, o.Name, o.GetValue(t, null)));
                if (i != pI.Length - 1)
                {
                    Json.Append(",");
                }
            }
            Json.Append("}");
            return Json.ToString();
        }

        public static T JsonToObject<T>(string json) where T : new()
        {
            T temp = Activator.CreateInstance<T>();
            using (JsonReader jsonReader = new JsonReader(new StringReader(json)))
            {
                while (jsonReader.Read())
                {
                    if (jsonReader.TokenType != JsonToken.None && jsonReader.TokenType != JsonToken.StartObject && jsonReader.TokenType == JsonToken.PropertyName)
                    {
                        string propertyName = jsonReader.Value.ToString();
                        jsonReader.Read();
                        if (jsonReader.TokenType == JsonToken.String)
                        {
                            string value = jsonReader.Value.ToString();
                            SetValueToProperty<T>(temp, propertyName, value);
                        }
                    }
                     
                }
            }
            return temp;
        }

        public static void SetValueToProperty<T>(T t, string propertyName, string value)
        {
            PropertyInfo[] pI = (t).GetType().GetProperties();
            foreach (PropertyInfo o in pI)
            {
                if (o.Name == propertyName)
                {
                    o.SetValue(t, value, null);
                }
            }
        }
    }


代碼: 選擇全部

    public class ChallengeResult
    {
        public string Account { get; set; }
        public string Password { get; set; }
        public string c { get; set; }
        public string s { get; set; }
        public string msg { get; set; }
    }