用.net dynamic实现对JSON文件的读写操作

现在VS2015支持生成Codorva程序了。在Javascript下,JSON格式使用的很多,但是.net framework下,使用起来很不方便,不能像Javascript那么随意。有一个专门的类库Newtonsoft.Json可以使用,但是公司比较正规,不好随便乱用三方的库,而且这个库也比较大,比较重,学习和使用成本都比较高。

后来,我想到了,现在的.net是支持dynamic关键字的,是不是可以利用它来方便的对JSON进行操作。下面是我写的代码,以供参考。

using System;
using System.Collections.Generic;
using System.Web.Script.Serialization;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            JavaScriptSerializer s = new JavaScriptSerializer();
            dynamic o = s.DeserializeObject("{\"name\": \r\n{\"subname\":\"zdeng\"}, \r\n\"age\": 30}");

            DynamicDictionaryReader reader = new DynamicDictionaryReader(o);
            string name2 = reader["name2"]["subname22"]["test"]["sfasfsa"].UnWrap();
            string name3 = reader["name"]["subname"].UnWrap();

            DynamicDictionaryWriter writer = new DynamicDictionaryWriter(o);
            writer["name22"]["subname123"] = "zdeng123";
            writer["name22"]["zdeng"]["hluo"]["subname123"] = 123;

            o["name"]["subname"] = "zdeng22";

            string newJson = s.Serialize(o);
        }

        class DynamicDictionaryReader
        {
            public DynamicDictionaryReader(dynamic dyn)
            {
                _dyn = dyn;
            }

            private dynamic _dyn;

            public DynamicDictionaryReader this[string key]
            {
                get
                {
                    dynamic result = null;
                    if (_dyn != null)
                    {
                        _dyn.TryGetValue(key, out result);
                    }

                    return new DynamicDictionaryReader(result);
                }
            }

            public dynamic UnWrap()
            {
                return _dyn;
            }
        }

        class DynamicDictionaryWriter
        {
            public DynamicDictionaryWriter(dynamic dyn)
            {
                _dyn = dyn;
            }

            private dynamic _dyn;

            public dynamic this[string key]
            {
                get
                {
                    dynamic result;
                    _dyn.TryGetValue(key, out result);
                    if (result == null)
                    {
                        result = new Dictionary<String, dynamic>();
                        _dyn[key] = result;
                    }

                    return new DynamicDictionaryWriter(result);
                }
                set
                {
                    _dyn[key] = value;
                }
            }
        }
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-19 03:01:33

用.net dynamic实现对JSON文件的读写操作的相关文章

Windows下使用scapy+python2.7实现对pcap文件的读写操作

scapy在linux环境中对pcap文件进行操作非常方便,但在windows下,特别是在python2.7环境下却会碰到各种各样的依赖包无法使用的问题,最明显的可能就属dnet和pcap的python依赖包了,因为scapy的conf.use_pcap和conf.use_dnet在windows环境下无法进行配置,在scapy\arch\windows\__init__.py中都被强行置为1了,也就是必须使用pcap和dnet依赖包.具体代码如下所示 from scapy.sendrecv i

python实现对excel表的读写操作(一)

Part 1. 模块介绍: 使用python实现对excel表的读写操作有两个模块,分别为: 1. 对excel表读取模块 xlrd 0.9.3  :下载地址: https://pypi.python.org/pypi/xlrd 英文释意:The package is for reading data and formatting information from Excel files. 2. 对excel表写入模块 xlwt 0.7.5 : 下载地址:https://pypi.python.

C#实现对Word文件读写[转]

手头上的一个项目报表相对比较简单,所以报表打印采用VBA引擎,通过定制Word模版,然后根据模版需要填充数据,然后OK,打印即可. 实现方法:首先需要引用VBA组建,我用的是Office2003 Professional,Dll版本号为Microsoft Word11.0 另外当然还需要引用Interop.Word.Dll. 代码如下: ///#region 打开Word文档,并且返回对象wDoc,wDoc /// /// 打开Word文档,并且返回对象wDoc,wDoc /// /// 完整W

php如何利用python实现对pdf文件的操作(读写、合并分割)

php如何利用python实现对pdf文件的操作 需求:在PHP里实现了把8.pdf的前4页pdf文件截取出来生成新的pdf文件. 详细步骤如下: 1. 安装python第三方库PyPDF2 前提:python必须是3.x版本以上,必要时需要升级pip3,命令如下:pip3 install --upgrade pipPyPDF 自 2010年 12月开始就不在更新了,PyPDF2 接棒 PyPDF, 在此使用PyPDF2. 安装命令:pip install PyPDF2 2.编写python脚本

Java 对不同类型的数据文件的读写操作整合器[JSON,XML,CSV]-[经过设计模式改造](2020年寒假小目标03)

日期:2020.01.16 博客期:125 星期四 我想说想要构造这样一个通用文件读写器确实不容易,嗯~以后会添加更多的文件类型,先来熟悉一下文件内容样式: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beangroup> 3 <javabean> 4 <data name='code'>A001</data> 5 <data name='name'>

C++中对txt文件的读写操作

最近在做颜色校正部分的操作,发现对C++文件的读写遗忘了,特记于此:改程序是实现对txt文件的写入与读出:这是初级的写法,有时间在搞一下高级写法:注意最后别忘了close掉打开的文件! 程序如下: // test.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include<iostream> #include<fstream> #includ

使用shell脚本简单模拟对特定文件同时读写操作

使用shell脚本简单模拟对特定文件同时读写操作文件内容的格式:field1    ,       field2    , field3    ,       field4以,为分隔符,但是存在空格. 脚本用法如下: ./check_write_read.sh 10 输出结果: Thu Apr 27 19:59:44 CST 2017:Read operation finished 670 Thu Apr 27 19:59:44 CST 2017:Write operation finished

IO流文件的读写操作

字符流有两个抽象类:Writer   Reader.其对应子类FileWriter,FileReader可实现文件的读写操作 同样,字节流也有两个抽象类:InputStream OutputStream.其对应子类有FileInputStream,FileOutputStream可实现文件读写 IO流中的重要方法:read()方法返回-1,readLine方法返回null.用法列如:while((line=br.readLine())!=null).Scanne类中的hasNext()方法如果此

File --文件的读写操作

File --文件的读写操作------------------- 1. 通过数组实现对一组数据的写入 1 package day01; 2 3 import java.io.FileNotFoundException; 4 import java.io.IOException; 5 import java.io.RandomAccessFile; 6 7 /** 8 * 批量写入一组字节 9 * @author Administrator 10 * 11 */ 12 public class