/// <summary>
/// 反射调用Newtonsoft.Json.dll,解决Newtonsoft.Json版本不一致报错
/// </summary>
public class JsonHelper
{
private static Dictionary<string, MethodInfo> MethodDic = new Dictionary<string, MethodInfo>();
private static System.Reflection.Assembly jsonAssembly = System.Reflection.Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "\\Newtonsoft.Json.dll");
//命名空间和类的名字必须一起指定
private static Type jsonType = jsonAssembly.GetType("Newtonsoft.Json.JsonConvert");
/// <summary>
/// 把object对象序列化成json字符串
/// </summary>
/// <param name="obj">序列话的实例</param>
/// <returns>序列化json字符串</returns>
public static string GetJsonFormObj(object obj)
{
object objResult = null;
if (!MethodDic.ContainsKey("SerializeObject"))
{
MethodInfo[] mis = jsonType.GetMethods(System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
foreach (MethodInfo mi in mis)
{
if (mi.ToString() == "System.String SerializeObject(System.Object)")
{
MethodDic.Add("SerializeObject", mi);
break;
}
}
}
if (MethodDic.ContainsKey("SerializeObject"))
{
objResult = MethodDic["SerializeObject"].Invoke(null, new object[] { obj });
}
else
{
JHLog.Log.Writelog("JsonHelper.GetJsonFormObj(object obj)函数通过反射未获取到System.String SerializeObject(System.Object)方法");
}
return objResult == null ? null : objResult.ToString();
}
/// <summary>
/// 把json字符串反序列化成Object对象
/// </summary>
/// <param name="json">json字符串</param>
/// <returns>对象实例</returns>
public static Object GetObjFromJson(string json)
{
object objResult = null;
if (!MethodDic.ContainsKey("DeserializeObject"))
{
MethodInfo[] mis = jsonType.GetMethods(System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
foreach (MethodInfo mi in mis)
{
if (mi.ToString() == "System.Object DeserializeObject(System.String)")
{
MethodDic.Add("DeserializeObject", mi);
break;
}
}
}
if (MethodDic.ContainsKey("DeserializeObject"))
{
objResult = MethodDic["DeserializeObject"].Invoke(null, new object[] { json });
}
else
{
JHLog.Log.Writelog("JsonHelper.GetObjFromJson(string json)函数通过反射未获取到System.Object DeserializeObject(System.String)方法");
}
return objResult;
}
/// <summary>
/// 把json字符串反序列化成泛型T
/// </summary>
/// <typeparam name="T">泛型</typeparam>
/// <param name="json">json字符串</param>
/// <returns>泛型T</returns>
public static T GetObjFromJson<T>(string json)
{
object objResult = null;
if (!MethodDic.ContainsKey("DeserializeObject<T>"))
{
MethodInfo[] mis = jsonType.GetMethods(System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
foreach (MethodInfo mi in mis)
{
if (mi.ToString() == "T DeserializeObject[T](System.String)")
{
MethodDic.Add("DeserializeObject<T>", mi);
break;
}
}
}
if (MethodDic.ContainsKey("DeserializeObject<T>"))
{
objResult = MethodDic["DeserializeObject<T>"].MakeGenericMethod(typeof(T)).Invoke(null, new object[] { json });
}
else
{
JHLog.Log.Writelog("JsonHelper.GetObjFromJson<T>(string json)函数通过反射未获取到T DeserializeObject[T](System.String)方法");
}
return (T)objResult;
}
public static Dictionary<string, string> GetDictFromJson(string json)
{
try
{
Dictionary<string, string> returnDic = new Dictionary<string, string>();
string tmpJson = json.Trim().Trim('"').Trim('{', '}');
string[] tmpStrs = tmpJson.Split(',');
for (int i = 0; i < tmpStrs.Length; i++)
{
string[] tmpItemStrs = tmpStrs[i].Split(':');
if (tmpItemStrs.Length != 2)
{
throw new Exception("JSON格式错误");
}
returnDic.Add(tmpItemStrs[0].Trim().Trim('"'), tmpItemStrs[1].Trim().Trim('"'));
}
return returnDic;
}
catch (Exception ex)
{
throw ex;
}
}
}
拼接成json串
var tokeninfo = new
{
token = token
};
var paramjson = new
{
appCode = "jhemr",
serviceCode = "unifiedAuthentication",
operId = "sso",
operTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
testFlag = false,
patientId = "",
registerId = "",
bizKey = "",
data = tokeninfo
};
string sjson = JsonConvert.SerializeObject(paramjson);
获取json字段信息
var obj = Newtonsoft.Json.Linq.JObject.Parse(returnmsg);
if (obj != null && obj["resCode"].ToString() == "0")
{
string userid = obj["data"]["userId"].ToString();
username = GetUserLoginName(userid);
}