描述:因工作中需要将C#中的Json字符串转换为对象,对此记录下。

解决办法:

1.前端传过来的Json字符串,OrderAppModuleJson即前端传递到后端的Json字符串

 string strJson = entity.OrderAppModuleJson;  //应用功能Json  

2.变量 strJson 输出如下


strJson = 
"[{\"AppID\":\"3aac341a-3404-4eb9-ab6a-3aae90e0a74e\",\"AppName\":\"政法系统\",\"AppAmount\":3333,\"data\":[{\"ModuleId\":\"8f1af52d-0bb7-4b3f-833d-c05c56a257fd\",\"ModuleName\":\"政法网站\",\"ModuleAmount\":10,\"subdata\":[{\"ModuleId\":\"88bb0290-64b6-4fb5-8d4d-b8fc194333d3\",\"ModuleName\":\"工作计划\",\"ModuleAmount\":\"10.0000\"},{\"ModuleId\":\"2e4336d3-bcab-4777-a791-e0f38c59057d\",\"ModuleName\":\"刑事案件\",\"ModuleAmount\":\"10.0000\"}]}]},{\"AppID\":\"923c341a-3404-4eb9-ab6a-3aae90e0a74e\",\"AppName\":\"订餐系统\",\"AppAmount\":4444,\"data\":[{\"ModuleId\":\"fb3f0517-cd8f-4dd5-91bc-0d8236683478\",\"ModuleName\":\"食堂管理\",\"ModuleAmount\":10,\"subdata\":[{\"ModuleId\":\"a206fe16-0a9b-4640-a121-0ab4ceb721c0\",\"ModuleName\":\"食堂管理\",\"ModuleAmount\":\"10.0000\"},{\"ModuleId\":\"9826c1ad-a606-40a3-b535-b808a6c822ea\",\"ModuleName\":\"餐厅管理\",\"ModuleAmount\":\"10.0000\"}]},{\"ModuleId\":\"1e2d67a2-70f6-4d24-a47f-a5c21024d406\",\"ModuleName\":\"人员管理\",\"ModuleAmount\":10,\"subdata\":[{\"ModuleId\":\"48869730-1432-4daf-a38d-23fa215500d6\",\"ModuleName\":\"人员信息维护\",\"ModuleAmount\":\"10.0000\"}]}]}]"

3.将上述Json进行Json验证,字符串如下

[{
"AppID": "3aac341a-3404-4eb9-ab6a-3aae90e0a74e",
"AppName": "测试系统",
"AppAmount": ,
"data": [{
"ModuleId": "8f1af52d-0bb7-4b3f-833d-c05c56a257fd",
"ModuleName": "测试网站",
"ModuleAmount": ,
"subdata": [{
"ModuleId": "88bb0290-64b6-4fb5-8d4d-b8fc194333d3",
"ModuleName": "测试计划",
"ModuleAmount": "10.0000"
}, {
"ModuleId": "2e4336d3-bcab-4777-a791-e0f38c59057d",
"ModuleName": "测试案件",
"ModuleAmount": "10.0000"
}]
}]
}, {
"AppID": "923c341a-3404-4eb9-ab6a-3aae90e0a74e",
"AppName": "订餐系统",
"AppAmount": ,
"data": [{
"ModuleId": "fb3f0517-cd8f-4dd5-91bc-0d8236683478",
"ModuleName": "食堂管理",
"ModuleAmount": ,
"subdata": [{
"ModuleId": "a206fe16-0a9b-4640-a121-0ab4ceb721c0",
"ModuleName": "食堂管理",
"ModuleAmount": "10.0000"
}, {
"ModuleId": "9826c1ad-a606-40a3-b535-b808a6c822ea",
"ModuleName": "餐厅管理",
"ModuleAmount": "10.0000"
}]
}, {
"ModuleId": "1e2d67a2-70f6-4d24-a47f-a5c21024d406",
"ModuleName": "人员管理",
"ModuleAmount": ,
"subdata": [{
"ModuleId": "48869730-1432-4daf-a38d-23fa215500d6",
"ModuleName": "人员信息维护",
"ModuleAmount": "10.0000"
}]
}]
}]

4.现在将Json转换为对象,首先得创建对象:BuyAppModuleEntity

using System;
using System.Collections.Generic; namespace Application.Entity
{
/// <summary>
/// 描 述:应用功能Json
/// </summary>
public class BuyAppModuleEntity
{
/// <summary>
/// 应用主键
/// </summary>
public string AppID { get; set; }
/// <summary>
/// 应用名称
/// </summary>
public string AppName { get; set; }
/// <summary>
/// 应用金额
/// </summary>
public decimal? AppAmount { get; set; }
/// <summary>
/// 功能菜单数据集合
/// </summary>
public List<data> data { get; set; }
} /// <summary>
/// 功能菜单主键
/// </summary>
public class data
{
/// <summary>
/// 功能菜单主键
/// </summary>
public string ModuleId { get; set; }
/// <summary>
/// 功能菜单名称
/// </summary>
public string ModuleName { get; set; }
/// <summary>
/// 功能菜单金额
/// </summary>
public string ModuleAmount { get; set; }
/// <summary>
/// 功能子菜单数据集合
/// </summary>
public List<subdata> subdata { get; set; }
} /// <summary>
/// 功能子菜单数据
/// </summary>
public class subdata
{
/// <summary>
/// 功能菜单主键
/// </summary>
public string ModuleId { get; set; }
/// <summary>
/// 功能菜单名称
/// </summary>
public string ModuleName { get; set; }
/// <summary>
/// 功能菜单金额
/// </summary>
public string ModuleAmount { get; set; }
} }

5.将Json转换为BuyAppModuleEntity对象,其中需引用:using Newtonsoft.Json;

 //循环解析应用和功能菜单数据
string strJson = entity.OrderAppModuleJson; //应用功能Json
EnumerableQuery<BuyAppModuleEntity> jobInfoList =
JsonConvert.DeserializeObject<EnumerableQuery<BuyAppModuleEntity>>(strJson);
foreach (BuyAppModuleEntity jobInfo in jobInfoList)
{
//解析应用数据
string appId = jobInfo.AppID;
string appName = jobInfo.AppName;
decimal appAmount =Convert.ToDecimal(jobInfo.AppAmount); //解析功能菜单数据
List<data> jobData = jobInfo.data;
foreach (data menu in jobData)
{
string moduleId = menu.ModuleId;
string moduleName = menu.ModuleName;
decimal moduleAmount = Convert.ToDecimal(menu.ModuleAmount); //解析功能子菜单数据
List<subdata> jobsubData = menu.subdata;
foreach (subdata sub in jobsubData)
{
string subModuleId = sub.ModuleId;
string subModuleName = sub.ModuleName;
decimal subModuleAmount = Convert.ToDecimal(sub.ModuleAmount);
}
}
}

按上述操作,即可将Json字符串转换为对象。

c#将前端传来的Json解析成对象的更多相关文章

  1. .net从网络接口地址获取json,然后解析成对象(一)

    整理代码,今天遇到一个问题,就是从一个场景接口获取json,然后解析成对象.之前的时候都好好的,这次返回的json字符串里,由于字符编码的问题,格式上不能转换.一直以为是解析的过程编码有误,试了utf ...

  2. C# 将 Json 解析成 DateTable

    #region 将 Json 解析成 DateTable /// /// 将 Json 解析成 DateTable. /// Json 数据格式如: /// {table:[{column1:1,co ...

  3. json转换成对象

    在json转换成对象时,json的key会与java 类的字段一一对应.如果没有映射上的java字段会在该数据类型上填充默认值,如int 0,String null 等. 没有映射的json key在 ...

  4. java后台解析前端传来的json

    @RequestMapping(value = {"save"}) @ResponseBody public Result save(TBaseInterventionPlan m ...

  5. FastJson将json解析成含有泛型对象,内部泛型对象再次解析出错的解决办法(Android)

    折腾小半天的问题,这里先感谢一下深圳的小伙子,远程帮我搞,虽然也没有搞出来==========FUCK 声明:Android开发下发生此异常,Java开发下并不会有这个问题 异常重现 简单说一下抛出异 ...

  6. 把复杂json解析成javabean

    工具:fastjson1.2.9 用其他工具也行,比如json-lib.gson 用法都差不多 先来一段json { "page": { "pagenow": ...

  7. Android 利用 gson 将 json 转成 对象object 集合list

    1.build.gradle 中引入gson compile 'com.google.code.gson:gson:2.8.5' 2.将后台返回的json数据转对象.List.时间格式与后台返回的时间 ...

  8. 项目记事【SpringMVC-1】:后台接收前端传来的JSON,并转成对象

    背景: 最近项目中使用SpringMVC,需要从前端接收JSON格式的请求,在后端自动转成一个与JSON格式相同的对象. 由于是一个老项目,Spring的版本是3.2.7. 问题1:POST or G ...

  9. python小练--使用正则表达式将json解析成dict

    练习python语法,自己实现了一个简单的解析json字符,存为dict字典对象. { "id":12, "name":"jack", &q ...

随机推荐

  1. Java之枚举举例

    package enumdemo; /** * 枚举类 */ public enum MAPPER { // 实例 ELEMENT_NAME("mapper"), ATTRIBUT ...

  2. caffe训练resume

    MODEL=${EXP}/model/${NET_ID}/pspnet101_VOC2012.caffemodel SNAPSHOT=${EXP}/model/${NET_ID}/train_iter ...

  3. 概率dp总结 正在更新

    借bin神一句话 概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 先推公式 多个 -> 一个 明确dp[i]代表什么意 ...

  4. 【转】linux环境内存分配原理 malloc info

    Linux的虚拟内存管理有几个关键概念: Linux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全 ...

  5. Shebang(#!)[转]

    原博文 使用Linux或者unix系统的同学可能都对#!这个符号并不陌生,但是你真的了解它吗? 首先,这个符号(#!)的名称,叫做"Shebang"或者"Sha-bang ...

  6. /dev/null与/dev/zero区别

    /dev/null和/dev/zero的区别 /dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着! /dev/zero,是一个输入设备,你可你用它来初始化文件.该设备无穷尽 ...

  7. 手动实现staticmethod和classmethod装饰器

    首先,staticmethod和classmethod装饰器是通过非数据描述符实现的.用法简单,这里就不细说了. 这里主要分析一下staticmethod和classmethod是如何通过描述符实现的 ...

  8. Android打造(ListView、GridView等)通用的下拉刷新、上拉自动加载的组件

    原文 http://blog.csdn.net/bboyfeiyu/article/details/39253051       前言 下 拉刷新组件在开发中使用率是非常高的,基本上联网的APP都会采 ...

  9. java中的内存空间 堆和栈

        认识堆与栈 栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆.Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过 ...

  10. XML:特殊字符转换

    <     < 小于号 >     > 大于号 &    & 和 &apos;   ' 单引号 "   " 双引号 实体必须以符号& ...