JsonToObject & ObjectToJson (.Net Framework 2.0)
發表於 : 週二 11月 08, 2011 1:23 pm
重點放在 Activator.CreateInstance<T>
建構在 .Net Framework 2.0 前提下
建構在 .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; }
}