最新のC#Objectとjsonの相互転送
4326 ワード
ネット上でC#Objectとjsonを検索して互いに回転して、主に2つの方案があって、しかしすべて使うことができないことを発見します.
まず、デバッグが正常に使用できるものを提供します.net framework 4.0、対応するdllライブラリを追加:Newtonsoft.Json.dll
ネット上の主な方案1:
このシナリオでは、次の文字列が実行されます.
"{\"k__BackingField\":0,\"k__BackingField\":0,\"k__BackingField\":0,\"k__BackingField\":4,\"k__BackingField\":15.6384974,\"k__BackingField\":0,\"k__BackingField\":0,\"k__BackingField\":11.9906368,\"k__BackingField\":29.7924538,\"k__BackingField\":0,\"k__BackingField\":874,\"k__BackingField\":8092,\"k__BackingField\":0.268140942,\"k__BackingField\":0.471894622}"
要求に合わない
シナリオ2:
すでに導入されていますが
Newtonsoft.Json.dll、しかしnet 4.0ではメソッドが期限切れになっているので、見つからないエラーが報告されます.ソリューションは、一番上にあります.
まず、デバッグが正常に使用できるものを提供します.net framework 4.0、対応するdllライブラリを追加:Newtonsoft.Json.dll
using Core.Bases;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
namespace Core.Text
{
public class JsonTools
{
// Json
public static string ObjectToJson(object obj)
{
return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
}
// Json
public static object JsonToObject(string jsonString, object obj)
{
return Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString, obj.GetType());
}
}
}
ネット上の主な方案1:
public static APIResponse GetResponse(string str)
{
StringReader sr = new StringReader(str);
JsonSerializer serializer = new JsonSerializer();
return (APIResponse)serializer.Deserialize(new JsonTextReader(sr), typeof(APIResponse));
}
///
/// Json
///
///
///
///
public static string GetJson(object obj)
{
if (obj == null)
return "";
DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
using (MemoryStream stream = new MemoryStream())
{
json.WriteObject(stream, obj);
string szJson = Encoding.UTF8.GetString(stream.ToArray());
return szJson;
}
}
///
/// Json Model
///
///
///
///
public static T ParseFromJson(string szJson)
{
if (typeof(T) == typeof(IEnumerable<>))
{
}
T obj = Activator.CreateInstance();
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
return (T)serializer.ReadObject(ms);
}
}
///
/// Json Model
///
///
///
///
public static IEnumerable ParseListFromJson(string szJson)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
return jss.Deserialize>(szJson);
//T obj = Activator.CreateInstance();
//using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
//{
// DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
// return (T)serializer.ReadObject(ms);
//}
}
このシナリオでは、次の文字列が実行されます.
"{\"k__BackingField\":0,\"k__BackingField\":0,\"k__BackingField\":0,\"k__BackingField\":4,\"k__BackingField\":15.6384974,\"k__BackingField\":0,\"k__BackingField\":0,\"k__BackingField\":11.9906368,\"k__BackingField\":29.7924538,\"k__BackingField\":0,\"k__BackingField\":874,\"k__BackingField\":8092,\"k__BackingField\":0.268140942,\"k__BackingField\":0.471894622}"
要求に合わない
シナリオ2:
// Json
public static string ObjectToJson(object obj)
{
return JavaScriptConvert.SerializeObject(obj);
}
// Json
public static object JsonToObject(string jsonString, object obj)
{
return JavaScriptConvert.DeserializeObject(jsonString, obj.GetType());
}
すでに導入されていますが
Newtonsoft.Json.dll、しかしnet 4.0ではメソッドが期限切れになっているので、見つからないエラーが報告されます.ソリューションは、一番上にあります.