zoukankan      html  css  js  c++  java
  • C# 后台解析json,简单方法 字符串序列化为对象,取值

    如果后台是一个JSON的字符串格式如下:

    string str = "{"Success":true,"Msg":"成功!"}";

    我们之间转成dynamic然后获取里面某个属性即可。

    dynamic response = Newtonsoft.Json.JsonConvert.DeserializeObject(str);

    string a = response.Success; string b = response.Msg;

    还有两种较为复杂的方法:

     Data data1 = JsonConvert.DeserializeObject<Data>(str);获取就直接:data1.Success。

    或者:List<Data> list = JsonConvert.DeserializeObject<List<Data>>(str);获取需要循环获取:foreach (var item in list)
                {
                     item.Success
                }

    但是以上2个方法都需要声明类

    public class Data
        {
            public string Success { get; set; }
            public string Msg { get; set; }
        }

     

     

     

    如果后台穿过来是一个Json(new { success = response.Success, msg = response.Msg }, JsonRequestBehavior.AllowGet);格式;直接转成dynamic 格式。获取: resulOb.Data.success。

     

    --------------题外话

    其实也可以用这种方式直接传给前台:

    public JsonResult projectPush(){

    Json(new { success = false, msg = "成功!" }, JsonRequestBehavior.AllowGet);

    }

    前台获取的时候直接:var result = Ext.decode(repsonse.responseText);result.success即可。当然这个是基于EXT的。你可以返回之后调适一下其他框架下的。

    --------------------------------------------------------------------------------------------------------     分割线    ------------------------------------------------------------------------------------------------------------------------------------------

    Newtonsoft.Json在json和对象之间转化是一个非常强大的工具。

    对象转化json字符串

    Newtonsoft.Json.JsonConvert.SerializeObject()

    json字符串转化为指定对象

     Newtonsoft.Json.JsonConvert.DeserializeObject<>()

    json字符串直接获取指定元素值(类似XML)

    var jObject=JObject.Parse(jsonstring);
    var time= jObject["time"].ToString();//获取time{"time":"2016-06-06 11:11:11"}

     xml转换json字符串

    XmlDocument doc = new XmlDocument();  
    doc.LoadXml(PostBackXml);
    var jObject = Newtonsoft.Json.JsonConvert.SerializeXmlNode(doc);//Xml转json

     当上面的XML在序列化是通常会出现根目录,根目录内出现的才是需要序列化的对象元素。

    不妨先转换为JObject,像下面这样使用jobj["MongoTask"]转换

     var json=JsonConvert.SerializeXmlNode(item);
     var jobj = JsonConvert.DeserializeObject<JObject>(json);
     tasklist.Add(jobj["MongoTask"].ToObject<MongoTask>());

     如果需要获取XML中属性的值,比如获取<user name='张三'>获取张三时name属相带有@符号

    代码中过滤到@符号就可以正常取值

    var jobj = Newtonsoft.Json.JsonConvert.DeserializeObject<JObject>(jObject.Replace("@",""));
    var name= jobj["Response"]["Body"]["OrderResponse"]["name"];

     

    小结:

    1:直接解析字符串
    var jObject=JObject.Parse(jsonstring); var time= jObject["time"].ToString();//获取time{"time":"2016-06-06 11:11:11"}

    2:通过转成dynamic然后获取里面某个属性即可。

    dynamic response = Newtonsoft.Json.JsonConvert.DeserializeObject(str);

    string a = response.Success; string b = response.Msg;

    3:先构造一个对象,再将json字符串转型为对象,获取它的属性
    ================================================================================

    1)使用JObject读写字符串:

    JObject jo = JObject.Parse(jsonText);
    string[] values = jo.Properties().Select(item => item.Value.ToString()).ToArray();
    
    

    (2)使用JsonSerializer读写对象(基于JsonWriter与JsonReader): 

    数组型数据

    复制代码
    复制代码
    string jsonArrayText1 = "[{'a':'a1','b':'b1'},{'a':'a2','b':'b2'}]";
    JArray ja = (JArray)JsonConvert.DeserializeObject(jsonArrayText1);
    string ja1a = ja[1]["a"].ToString();
    //或者
    JObject o = (JObject)ja[1];
    string oa = o["a"].ToString();
    复制代码
    复制代码

    嵌套格式

    string jsonText = "{"beijing":{"zone":"海淀","zone_en":"haidian"}}";
    JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
    string zone = jo["beijing"]["zone"].ToString();
    string zone_en = jo["beijing"]["zone_en"].ToString();
  • 相关阅读:
    模拟操作(键盘、鼠标)三
    获取硬件信息
    MVC+ajax权限管理
    Socket通信简介
    网页页头meta详解(科普知识)
    .Net 无法打开Offie Open XML文件(上传和下载使用)
    临时散文,哈哈
    SQL server中的一些查询
    vue 钩子函数中获取不到DOM节点
    HTML技巧:怎样禁止图片拖动复制
  • 原文地址:https://www.cnblogs.com/aashui/p/9486091.html
Copyright © 2011-2022 走看看