.NET下 JSON 的一些常用操作

VB.NET中SelectToken与JSONPath的简单查询 通过灵活组合 JSONPath 和JArrayJObject的操作,可以高效处理 JSON 数据的查询、修改和分析。 阅读详情

1.JSON的序列化和反序列化

首先要先添加引用:

代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;

namespace PlayJSON
{
    class Program
    {
        static void Main(string[] args)
        {
            List<StuInfo> list = new List<StuInfo>() { new StuInfo{StuName="张三",StuSex="男",StuAge=11},
                                                       new StuInfo{StuName="李四",StuSex="男",StuAge=32},
                                                       new StuInfo{StuName="王翠花",StuSex="女",StuAge=64}
                                                      };
            string jsonStr = JavaScriptConvert.SerializeObject(list);  //将对象转换成json存储
            Console.WriteLine("JSON字符串"+jsonStr);
            Console.ReadLine();

            List<StuInfo> newList = new List<StuInfo>();

           newList = (List<StuInfo>)JavaScriptConvert.DeserializeObject(jsonStr,typeof(List<StuInfo>));   //反序列化

            //StuInfo s = new StuInfo() { StuName = "阿龙", StuSex = "男", StuAge = 33 };

            //string sigleJSON = JavaScriptConvert.SerializeObject(s);

           //StuInfo newS = (StuInfo)JavaScriptConvert.DeserializeObject(sigleJSON);
           //Console.WriteLine("姓名:" + newS.StuName + "---性别:" + newS.StuSex + "--年龄:" + newS.StuAge + "\n\n");


           foreach (StuInfo item in newList)
           {
               Console.WriteLine("姓名:" + item.StuName + "---性别:" + item.StuSex + "--年龄:" + item.StuAge + "\n\n");
           }
            Console.ReadLine();
        }
    }
    public class StuInfo 
    {
        public string StuName { set; get; }
        public string StuSex { set; get; }
        public int StuAge { set; get; }
    }
}

2.在web中

首先添加一个一般处理文件 Handler1.ashx:用来返回一个json

/// <summary>
    /// Handler1 的摘要说明
    /// </summary>
    public class Handler1 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "application/json";

            List<StuInfo> list = new List<StuInfo>() { new StuInfo{StuName="张三",StuSex="男",StuAge=11},
                                                       new StuInfo{StuName="李四",StuSex="男",StuAge=32},
                                                       new StuInfo{StuName="王翠花",StuSex="女",StuAge=64}
                                                      };
            string jsonStr = JavaScriptConvert.SerializeObject(list);

            context.Response.Write(jsonStr);

            context.Response.End();
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
    public class StuInfo
    {
        public string StuName { set; get; }
        public string StuSex { set; get; }
        public int StuAge { set; get; }
    }

前台页面上的调用:这里采用jquery 的ajax请求

<head runat="server">
    <title>JSON</title>
    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function () {
            $("#btnOK").click(function () {
                $.ajax({
                    type: "JSON",
                    url: "Handler1.ashx",
                    data: null,
                    success: function (msg) {
                        var con="";
                        for (var i = 0; i < msg.length; i++) {
                            con += "姓名:" + msg[i].StuName + "--性别:" + msg[i].StuSex + "--" + "--年龄:" + msg[i].StuAge+"<br/>";
                        }

                        $("#divContent").html("长度:" + msg.length + "--具体内容:<br/>" + con);
                    }
                });
            });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <input type="button" id="btnOK" value="点我获得JSON数据" />
    <div id="divContent"></div>
    </div>
    </form>
</body>

现在经常会用到json,因此经常会需要对其进行序列化和反序列化。,.NET Framewok 3.5也提供了JSON对象序列化和反序列化的类,这就是System.Runtime.Serialization.Json 命名空间下的 DataContractJsonSerializer 类。利用这个类,可以实现JSON对象的序列化和反序列化。

现在我提供一个类JSON对象序列化和反序列化的类供参考用:

/// <summary>
    /// JSON帮助类。用于将对象转换为Json格式的字符串,或者将Json的字符串转化为对象。
    /// </summary>
    public static class JsonHelper
    {
        /// <summary>
        /// 将对象转化为Json字符串 
        /// </summary>
        /// <typeparam name="T">源类型</typeparam>
        /// <param name="obj">源类型实例</param>
        /// <returns>Json字符串</returns>
        public static string GetJsonFromObj<T>(T obj)
        {
            DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(obj.GetType());
            using (MemoryStream ms = new MemoryStream())
            {
                jsonSerializer.WriteObject(ms, obj);
                return Encoding.UTF8.GetString(ms.ToArray());
            }
        }

        /// <summary>
        /// 将Json字符串转化为对象
        /// </summary>
        /// <typeparam name="T">目标类型</typeparam>
        /// <param name="strJson">Json字符串</param>
        /// <returns>目标类型的一个实例</returns>
        public static T GetObjFromJson<T>(string strJson)
        {
            T obj = Activator.CreateInstance<T>();
            using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson)))
            {
                DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(obj.GetType());
                return (T)jsonSerializer.ReadObject(ms);
            }
        }

        /// <summary>
        /// 将DataTable转换为JSON字符串
        /// </summary>
        /// <param name="dt">数据表</param>
        /// <returns>JSON字符串</returns>
        public static string GetJsonFromDataTable(DataTable dt)
        {
            StringBuilder JsonString = new StringBuilder();
            if (dt != null && dt.Rows.Count > 0)
            {
                JsonString.Append("{ ");
                JsonString.Append("\"TableInfo\":[ ");
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    JsonString.Append("{ ");
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        if (j < dt.Columns.Count - 1)
                        {
                            JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\",");
                        }
                        else if (j == dt.Columns.Count - 1)
                        {
                            JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\"");
                        }
                    }
                    if (i == dt.Rows.Count - 1)
                    {
                        JsonString.Append("} ");
                    }
                    else
                    {
                        JsonString.Append("}, ");
                    }
                }
                JsonString.Append("]}");
                return JsonString.ToString();
            }
            else
            {
                return null;
            }
        }

        /// <summary> 
        /// 将对象转化为Json字符串 
        /// </summary> 
        /// <param name="obj">源对象</param> 
        /// <returns>json数据</returns> 
        public static string ObjToJson(this object obj)
        {
            JavaScriptSerializer serialize = new JavaScriptSerializer();
            return serialize.Serialize(obj);
        }

        /// <summary> 
        /// 将Json字符串转化为对象
        /// </summary> 
        /// <param name="strJson">Json字符串</param> 
        /// <returns>目标对象</returns>
        public static T JsonToObj<T>(string strJson)
        {
            JavaScriptSerializer serialize = new JavaScriptSerializer();
            return serialize.Deserialize<T>(strJson);
        }

        /// <summary> 
        /// 将对象转化为Json字符串(控制深度 )
        /// </summary> 
        /// <param name="obj">源对象</param> 
        /// <param name="recursionDepth">深度</param> 
        /// <returns>json数据</returns> 
        public static string ObjToJson(this object obj, int recursionDepth)
        {
            JavaScriptSerializer serialize = new JavaScriptSerializer();
            serialize.RecursionLimit = recursionDepth;
            return serialize.Serialize(obj);
        }

        /// <summary> 
        /// 将Json字符串转化为对象(控制深度 )
        /// </summary> 
        /// <param name="strJson">Json字符串</param> 
        /// <param name="recursionDepth">深度</param> 
        /// <returns>目标对象</returns>
        public static T JsonToObj<T>(string strJson, int recursionDepth)
        {
            JavaScriptSerializer serialize = new JavaScriptSerializer();
            serialize.RecursionLimit = recursionDepth;
            return serialize.Deserialize<T>(strJson);
        }

        /// <summary> 
        /// 将DataTable转换为JSON字符串
        /// </summary> 
        /// <param name="dt">DataTable</param> 
        /// <returns>json数据</returns> 
        public static string DataTableToJson(DataTable dt)
        {
            Dictionary<string, object> dic = new Dictionary<string, object>();

            int index = 0;
            foreach (DataRow dr in dt.Rows)
            {
                Dictionary<string, object> result = new Dictionary<string, object>();

                foreach (DataColumn dc in dt.Columns)
                {
                    result.Add(dc.ColumnName, dr[dc].ToString());
                }
                dic.Add(index.ToString(), result);
                index++;
            }
            return ObjToJson(dic);
        }
    }


使用如下:


public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            //反序列化成对象     
            String strJson = "{\"Name\":\"Test123\",\"Url\":\"http://www.126.com/\"}";
            Person p1 = JsonHelper.GetObjFromJson<Person>(strJson);
            Response.Write("<li>" + p1.Name + " " + p1.Url);
            Person p2 = JsonHelper.JsonToObj<Person>(strJson);
            Response.Write("<li>" + p2.Name + " " + p2.Url);
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            //对象的序列化 
            String JSONString = string.Empty;
            Person p1 = new Person();
            p1.Name = "Test123'\"\n\r\t";
            p1.Url = "http://www.126.com/";
            JSONString = JsonHelper.GetJsonFromObj<Person>(p1);
            Response.Write("<li>" + JSONString);
            JSONString = JsonHelper.ObjToJson(p1);
            Response.Write("<li>" + JSONString);
        }
    }

    /// <summary> 
    /// 类对象需要标记为DataContractAttribute 
    /// </summary> 
    [DataContractAttribute]
    class Person
    {
        //成员需要标记为 DataMember 
        [DataMember]
        public string Name { set; get; }
        [DataMember]
        public string Url { set; get; }
    }

Json.NET json字符串反序列化为json对象 


如何将一个字符串转换为JSON对象呢?如果先创建一个类的话,那就太累了。

var o = new
{
   a = 1,
   b = "Hello, World!",
   c = new[] { 1, 2, 3 },
   d = new Dictionary<string, int> { { "x", 1 }, { "y", 2 } }
};

var json = JsonConvert.SerializeObject(o);

现在json是一个字符串。

第一种做法(匿名类):

var anonymous = new { a = 0, b = String.Empty, c = new int[0], d = new Dictionary<string, int>() };
var o2 = JsonConvert.DeserializeAnonymousType(json, anonymous);

Console.WriteLine(o2.b);
Console.WriteLine(o2.c[1]);

第二种做法(匿名类):

var o3 = JsonConvert.DeserializeAnonymousType(json, new { c = new int[0], d = new Dictionary<string, int>() });

Console.WriteLine(o3.d["y"]);

DeserializeAnonymousType 只是借助这个匿名对象参数(anonymous) 反射类型而已,也就是说它和反序列化结果并非同一个对象。正如 o3 那样,我们也可以只提取局部信息。

 

第三种做法(索引器):

实际上,我们也可以直接反序列化为 JObject,然后通过索引器直接访问。JObject、JProperty 等都继承自 JToken,它重载了基元类型转换操作符,我们可以直接得到实际结果。
var o2 = JsonConvert.DeserializeObject(json) as JObject;

Console.WriteLine((int)o2["a"]);
Console.WriteLine((string)o2["b"]);
Console.WriteLine(o2["c"].Values().Count());
Console.WriteLine((int)o2["d"]["y"]);



深度解析.NET中的JSON处理工具 数据交换在软件开发中是一个基础而核心的需求,而JSON(JavaScript Object Notation)以其轻量级、易于阅读和编写的特性,成为了网络通信和数据交换的事实标准之一。本章将对JSON数据格式的背景、结构和应用进行深入探讨。JSON.NET是一个广泛使用的.NET库,用于处理JSON数据格式。它提供了强大的序列化和反序列化功能,能够将复杂的.NET对象转换成JSON格式,并将JSON数据转换回.NET对象。 阅读详情

相关推荐

掌握C#中Json.NET的JSON转换技巧

除了基本的序列化和反序列化功能,Json.NET还提供了许多高级功能,比如自定义转换器、支持泛型集合和动态类型、JSON路径查询等。使用自定义转换器来处理特定类型的序列化:// 读取JSON中的时间字符串,并将其转换为DateTime对象// 将DateTime对象转换为JSON格式的字符串// 使用时,将这个转换器应用到序列化或反序列化操作中BSON,即Binary JSON,是一种类似于JSON的数据格式,但以二进制形式存储,其设计目标是在网络传输中更有效率。

weixin_36197669的博客 1172

JSON简介与及.NET中如何使用

.NET中如何使用JSON

dotNet开发技术分享 1746

JDK 1.5与Tomcat 6兼容的JSON处理库:net.sf.json.JSONObject

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,以其易于人阅读和编写、易于机器解析和生成而被广泛应用于现代Web应用中。它基于JavaScript的一个子集,现在已经成为一种独立于语言的数据交换格式。JSON格式的数据可以通过键值对的形式存储信息,这些键值对通常存储在一个有序的列表中。JSON 数据格式的特点包括:轻量级:数据存储简单,易于阅读和编写。语言无关:几乎所有的编程语言都能解析JSON数据。结构清晰。

weixin_36213081的博客 1259

.NET 中的 Json 使用体验

本文主要总结介绍.NET 中的对 Json 数据使用在使用过程中的关于编码、循环引用、时间格式化的一些问题

桑榆肖物 1458

AS5600磁编码器选型与安装避坑指南:磁铁形状、间隙距离到底怎么选?(附实测数据)

本文详细解析了AS5600磁编码器的选型与安装要点,包括磁铁形状、间隙距离等关键参数的选择,并附有实测数据支持。特别针对Arduino和I2C接口的应用场景,提供了硬件选型和机械安装的实用指南,帮助开发者避免常见陷阱,提升系统精度和稳定性。

weixin_27038245的博客 288

allegro 约束管理Constraint Manager(一)

介绍Cadence allegro 约束管理器CM的使用方法。

weixin_38975819的博客 8715

对C#和.net使用List<自定义>和Json格式相互转化的总结

关于JSON的入门介绍见http://www.json.org/ ,或者百度,这里不赘述,不过通过下面的例子会有个更快捷和更直观的认识。 如Json格式[{"id":"1","name":"sara"},{"id":"2","name":"sara2"}] 自定义数据类型,用于List [DataContract] class Person { [DataMem

apple151128的博客 8651

知识图谱初步学习(一)——本体+Protege新手学习

文章目录前言(本体详解)1.本体概念2.本体分类3.本体组成4.本体构建方法一、protege简介二、软件使用步骤1.安装2.使用三、问题解决方案汇总 前言(本体详解) 在开始学习知识图谱的过程中,首先就是要了解什么是本体(ontology)。 1.本体概念 本体的概念最初源自于哲学领域,在哲学中的定义为“对世界上客观事物的系统描述,即存在论”。哲学中的本体关心的是客观现实的抽象本质。而在计算机领域,本体是可以在语义的层次上来对知识进行描述,可以看做是某一个领域知识的通用模型。 本体是从客观世界中抽象出来

qq_43654669的博客 3万+

.Net处理json数据常见的几种方法

1、首先构建json数据 创建一个一般处理程序: JsonData.ashx public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; //--构建json格式数据 //stri

zhangjf20120224的专栏 7756

使用openMVS对样例数据进行重建

openMVS根据github上的步骤进行编译。注意,如果没有GPU,用不了CUDA的话,那么需要在openMVS目录下找到CmakeLists.txt文件,把CUDA设置为OFF: SET(OpenMVS_USE_CUDA OFF CACHE BOOL "Enable CUDA library") 可执行的文件生成在openMVS_build/bin/里面,在openMVS_build文件夹下打开终端,按照顺序执行如下命令即可逐步重建。其中,-w 设置的是数据的总路径,-i 后接输入的文件名,-o

YuhsiHu的博客 2887

EMB电子机械制动系统和EHB电子液压制动系统控制功能的对比

EMB电子机械制动系统相比EHB液压制动系统具有显著优势:响应速度更快(<100ms)、控制精度更高(±2N·m)、能实现单轮独立控制,支持0.1%级制动力调节。在ABS、ESC等安全功能上表现更优,制动平顺性和NVH性能更好,同时提升能量回收效率15%-20%。特别适合智能驾驶需求,可使AEB等系统响应时间缩短50ms,紧急制动距离减少1米以上。EMB系统完美契合高阶自动驾驶对快速响应和精准控制的要求。

m0_59012156的博客 885

net中c#教程 Json字符串的常用操作

json字符串格式的出现,大大地方便了不同系统间的数据传输,无论是Net项目还是Java项目都适用。今天就分享几个json的常用操作。我们是基于Newtonsoft.Json这个第三方类库实现的,使用Nuget就可以直接下载。

小Q的博客 274

OpenClaw 报错 TypeError: Cannot read properties of undefined (reading ‘prototype‘):Node.js 版本不兼容

国产化环境中部署OpenClaw云边协同平台时,出现"TypeError: Cannot read properties of undefined (reading 'prototype')"报错。经分析发现根本原因是Node.js版本与依赖生态不兼容,新版本Node(如v21)移除了旧依赖使用的内部API。解决方案包括:1)使用nvm切换至兼容的Node 16/18 LTS版本;2)容器化部署固定Node版本;3)遵循官方推荐的引擎版本范围。该问题揭示现代工程中版本管理的重要性,

博客 2313

Newtonsoft.Json 操作 JSON 字符串

Newtonsoft.Json介绍   在做开发的时候,很多数据交换都是以json格式传输的。而使用Json的时候,我们很多时候会涉及到几个序列化对象的使用:DataContractJsonSerializer,JavaScriptSerializer和Json.NET即Newtonsoft.Json。大多数人都会选择性能以及通用性较好Json.NET,这个不是微软的类库,但是一个...

FDLLL2008的博客 217

RK3399平台入门到精通系列讲解 - 总目录

欢迎大家来到内核笔记的《RK3399平台开发入门到精通系列讲解》,开始前博主先列出RK3399平台学习的大纲,同时这也可以作为大家学习RK3399内核与安卓框架的参考。下面蓝字都是传送门,点击进入即可:...

内核笔记 10万+

基于知识图谱的农作物病虫害问答系统设计与实现

基于规则的问题分类是自问答系统诞生以来就一直存在的方式,主要代表就是众多的专家系统,构建专家系统采用的是规则分类器,优点是能够对特定领域、特征明显的问题进行高效精准问答,但是。,在问答系统中,问题以语音及文本字符等自然语言形式输入,利用问答系统的内部的逻辑处理模块,通过自然语言处理技术获得输入问句的详细语义信息,再经过知识检索、置信分析等步骤,自然语言处理中,用于文本分类任务的机器学习方式有两种,一种用传统的机器学习,如 NBC、SVM 等,另一种采用深度学习,如 CNN 和 RNN 等。

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 2166

.Net HttpClient 使用Json数据

本文介绍了在 .Net 中使用 HttpClient 处理 JSON 数据的方法。JSON 是现代 Web 开发中最常用的数据交换格式,HttpClient 提供了强大的支持,包括序列化和反序列化功能。文章详细讲解了如何手动管理 JSON 数据,使用 System.Net.Http.Json 或 Newtonsoft.Json 类库进行序列化和反序列化操作,并展示了如何在请求和响应中使用 JSON 数据。此外,还介绍了如何使用 .Net 框架提供的类库简化 JSON 数据处理,推荐使用框架类库以提高效率和减

bicijinlian的专栏 1650

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

收集常用的.net开源项目

Json.NET http://json.codeplex.com/ Json.Net是一个读写Json效率比较高 的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单。通过Linq To JSON可以快速的读写Json,通过JsonSerializer可以序列化你的.Net对象。让你轻松实现.Net中所有类型(对象,基本数据类型 等)和Json的转换。 ...

diaozhuochuan9223的博客 594

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java中使用Json的net.sf.json包资源下载

Java中使用Json的net.sf.json包资源下载 【下载地址】Java中使用Json的net.sf.json包资源下载 本资源为Java开发者提供了net.sf.json包的相关文件,该包是处理Json数据的常用工具,支持JSONObject与JSONArray等核心操作类,简化了Json的解析、生成与处理流程。...

gitblog_06712的博客 424

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

.Net Core中JSON基础用法快速入门(带示例输出)

本文将用最简单的方式介绍.NET Core中常用的JSON操作方法,并提供代码对应的输出结果演示。

hzg03的博客 682

.Net中JSON序列化和反序列化

 .Net 中有多种对象序列化的方式,如XML序列化,Binary序列化及JSON序列化。 JSON(JavaScript Object Notation)是一种轻量级的数据交换语言,是一种高效的数据编码格式,可用于在客户端浏览器和支持AJAX的web服务之间快速交换少量数据。和XML序列化相比,JSON序列化后产生的数据一般要比XML序列化后产生的数据体积小。 本文主要介绍 .Net

yanjing的专栏 519

常用的.net开源项目

阅读目录Json.NETMath.NETFaker.NetHtml Agility PackNCrawlerSuperWebSocketSuperSocketQuartz.NETLucene.NetHttpLibSmart Thread PoolDocXPDFsharpDapperNHibernatelog4netSharpSerializerXProxynopCommerceEnterpr...

weixin_30423977的博客 187
上一篇: C#中调用API函数RegisterHotKey注册多个系统热键
下一篇: 全国地区+邮编的数据库脚本
HelloJimmy520
博客等级 码龄16年 31粉丝 13原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值