JSON的序列化和反序列化,使用的JSONdotnet(Newtonsoft.Json)

Ling的数据格式和简单用法

不需要写实体类,更灵活。
1、JToken

// 以下两种写法都可以被转换为 JToken 类型
string jtokenstring1 = "\"Hello World\"";
string jtokenstring2 = "{\"name\":\"John\",\"age\":30}";
JToken jtoken1 = JToken.Parse(jtokenstring1);
JToken jtoken2 = (JToken)JsonConvert.DeserializeObject(jtokenstring2);

2、JObect

// 只能序列化标准的 json 字符串
string jobjstring2 = "{\"name\":\"John\",\"age\":30}";
JObject jobj1 = JObject.Parse(jtokenstring2);
JObject jobj2 = (JObject)JsonConvert.DeserializeObject(jtokenstring2);

3、JArray

// 以下两种写法都可解析
// 主要标识就是字符串两段是中括号
string jarraystring1 = "[\"value1\",\"value2\"]";
string jarraystring2 = "[{\"name\":\"John\",\"age\":30},{\"name\":\"Bob\",\"age\":20}]";
JArray jarray1 = JArray.Parse(jarraystring2);
JArray jarray2 = (JArray)JsonConvert.DeserializeObject(jarraystring2);

4、JProperty

// 创建一个 JProperty 的对象,然后转成字符串值
string propertyname = "name";
string propertyvalue = "John";
JProperty jproperty = new JProperty(propertyname, propertyvalue);
var jp = jproperty.ToString(); // 结果:"name": "John"
 
// 但是通过这个输出的格式进行序列化时,就会提示异常,如下:
string jpropertystring1 = "\"name\": \"John\"";
// Newtonsoft.Json.JsonReaderException:Additional text encountered after finished reading JSON content
var jProperty1 = JProperty.Parse(jpropertystring1); 
var jProperty2 = (JProperty)JsonConvert.DeserializeObject(jpropertystring1);
 
// 下面将 jproperty 对象加入 JObject
JObject jobject = new JObject(); // 将 JProperty 添加到 JObject 中
jobject.Add(jproperty);
string jsonstring = jobject.ToString(); // 将 JObject 转换为字符串
Console.WriteLine(jsonstring);
// 输出:{\r\n  \"name\": \"John\"\r\n}

5、JValue

JObject jsonObject = JObject.Parse("{\"a\":10,\"b\":\"Hello World\",\"c\":10}");
// 获取值信息
JValue jvaluea = (JValue)jsonObject["a"];
JValue jvalueb = (JValue)jsonObject["b"];
JValue jvaluec = (JValue)jsonObject["c"];
// JValue 两个实例比较
Console.WriteLine("jvaluea.Equals(jvalueb): " + jvaluea.Equals(jvalueb)); // false
Console.WriteLine("jvaluea.Equals(jvaluec): " + jvaluea.Equals(jvaluec)); // true
Console.WriteLine("jvaluea==jvaluec: " + (jvaluea == jvaluec)); // false
Console.WriteLine("jvalueb: " + jvalueb); // Hello World
int intValue = jvaluea.Value<int>(); // 将值转换为整数类型
Console.WriteLine("Integer value: " + intValue);

类型转换

要写实体类
Json 对象转字符串

// 测试一下
JObject jsonobject = JObject.Parse("{\"a\":10,\"b\":\"Hello World\",\"c\":10}");
string jsonobjectstr = ObjectToJsonstr(jsonobject);
Console.WriteLine("jsonobjectstr:" + jsonobjectstr);
 
JValue jvalue = (JValue)jsonobject["b"];
Console.WriteLine("jvalue:" + jvalue);
string jvaluestr = ObjectToJsonstr(jvalue);
Console.WriteLine("jvaluestr:" + jvaluestr);
 
JArray jsonarray = JArray.Parse("[{\"a\":10,\"b\":\"Hello World\",\"c\":10}]");
string jsonarraystr = ObjectToJsonstr(jsonarray);
Console.WriteLine("jsonarraystr:" + jsonarraystr);
 
// 将 Json 对象转换成字符串格式
public static string ObjectToJsonstr(this object obj)
{
    
    
    if (obj == null)
        return null;
    return JsonConvert.SerializeObject(obj);
}

json 字符串转 Json 对象

// 以下是将字符串转成三种对象的方法,写法相同
JObject jo = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(strjson);
JToken jo = (JToken)Newtonsoft.Json.JsonConvert.DeserializeObject(strjson);
JArray jo = (JArray)Newtonsoft.Json.JsonConvert.DeserializeObject(strjson);

json 字符串转实体对象 T

// 测试一下
string jsonobject = "{\"name\":\"张三\",\"code\":\"1001\"}";
var person = JsonstrToObject<Person>(jsonobject);
 
public static T JsonstrToObject<T>(this string input)
{
    
    
    try
    {
    
    
        return JsonConvert.DeserializeObject<T>(input);
    }
    catch (Exception ex)
    {
    
    
        return default(T);
    }
}

实体对象转 Json 对象

Person person = new Person() {
    
     name = "张三", code = "1001" };
var personobj = Json_Object.TObjectToJsonobj<Person>(person);
string name = personobj["name"].ToString();
 
class Person
{
    
    
    public string name {
    
     get; set; }
    public string code {
    
     get; set; }
}
 
public static JObject TObjectToJsonobj<T>(T data)
{
    
    
    try
    {
    
    
        JToken jtoken = JToken.FromObject(data);
        // 【JObject】
        // JObject jobject = JObject.FromObject(data);
        // 【JArray】是数组,因此仅针对对象集合 List<T>
        // List<T> datas = new List<T>();
        // datas.Add(data);
        // JArray jarray = JArray.FromObject(datas);
        return jobject;
    }
    catch
    {
    
    
        return null;
    }
}

原文:https://www.cnblogs.com/hnzhengfy/p/JObjectJArray.html

猜你喜欢

转载自blog.csdn.net/weixin_44347839/article/details/135013963