动态类型和匿名类型在asp.net webapi中的应用

1、  动态类型用于webapi调用

假设需要调用一个webapi,webapi返回了一个json字符串。字符串如下:

{"ProductId":"AN002501","ProductName":"XX洗衣粉","Description":"","UnitPrice":9.9}

问:如何获得json字符串中的值?

常规的做法是:先构建一个类,然后再使用JsonConvert对它进行反序列化。示例如下:

(1)构建类

 1 public class Product
 2 {
 3
 4         public string ProductId { get; set; }
 5
 6         public string ProductName { get; set; }
 7
 8         public string Description { get; set; }
 9
10         public decimal UnitPrice { get; set; }
11
12 }

(2)反序列化:

1 string jsonString = "{\"ProductId\":\"AN002501\",\"ProductName\":\"XX洗衣粉\",\"Description\":\"\",\"UnitPrice\":9.9}";
2
3 dynamic product = JsonConvert.DeserializeObject<Product>(jsonString);

若是使用动态类型的话,则可以不需要构建一个类来承载序列化。示例如下:

1 dynamic obj = JsonConvert.DeserializeObject<dynamic>(jsonString);

2、  匿名类型用于webapi输出

假设需要输出以下的json字符串:{"Id":"AN002501","Price":9.9}。问:如何达成目的?

常规的做法是:先构建一个拥有Id和Price属性的类,然后再对它进行序列化后输出。示例如下:

(1)构建类

1 public class SimpleProduct
2 {
3         public string Id { get; set; }
4
5         public decimal Price { get; set; }
6 }

(2)序列化后输出

public ActionResult Test1()
{
    return Json(new SimpleProduct { Id = "1333", Price = 9.9M }, JsonRequestBehavior.AllowGet);   }

若使用匿名类型的话,则不需要构建一个类来承载序列化。示例如下:

public ActionResult Test2()
{
    return Json(new { Id = "1333", Price = 9.9M }, JsonRequestBehavior.AllowGet);
}
时间: 2024-10-11 00:58:31

动态类型和匿名类型在asp.net webapi中的应用的相关文章

在asp.net WebAPI 中 使用Forms认证和ModelValidata(模型验证)

一.Forms认证 1.在webapi项目中启用Forms认证 Why:为什么要在WebAPI中使用Forms认证?因为其它项目使用的是Forms认证. What:什么是Forms认证?它在WebAPI中就是一个MessageHandle,具体请查找关键字“ASP.NET Forms” How:如何启动Forms认证? 最简单的是通过配置启动Forms认证: 1 <system.web> 2 <authentication mode="Forms"> 3 <

Asp.Net WebAPI中Filter过滤器的使用以及执行顺序

转发自:http://www.cnblogs.com/UliiAn/p/5402146.html 在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理.引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想,通过Filter能统一地对一些通用逻辑进行处理,如:权限校验.参数加解密.参数校验等方面我们都可以利用这一特性进行统一处理,今天我们来介绍Filter的开发.使用以及讨论他们的执行顺序. Filter

Asp.Net WebAPI 中Cookie 获取操作方式

1. /// <summary> /// 获取上下文中的cookie /// </summary> /// <returns></returns> [HttpGet] [HttpPost] public string GetOne() { //1.在WebApi中这种方式获取cookie 可以成功 //2.在WebApi 中这种凡是获取Form,QueryString 中的参数是有效的 HttpCookieCollection collection= Htt

[转]在ASP.NET WebAPI 中使用缓存【Redis】

初步看了下CacheCow与OutputCache,感觉还是CacheOutput比较符合自己的要求,使用也很简单 PM>Install-Package Strathweb.CacheOutput.WebApi2 基础使用 CacheOutput特性 [Route("get")] [CacheOutput(ClientTimeSpan = 60, ServerTimeSpan = 60)] public IEnumerable<string> Get() { retu

在ASP.NET WebAPI 中使用缓存【Redis】

初步看了下CacheCow与OutputCache,感觉还是CacheOutput比较符合自己的要求,使用也很简单 PM>Install-Package Strathweb.CacheOutput.WebApi2 基础使用 CacheOutput特性 [Route("get")] [CacheOutput(ClientTimeSpan = 60, ServerTimeSpan = 60)] public IEnumerable<string> Get() { retu

C#匿名类型(Anonymous Type)学习日记

当我们不要定义复杂的方法,事件,构造函数这样复杂的类的时候,可以动态的生成一个自定义的数据类型 --> 匿名类型. 1.定义匿名类型 定义一个匿名类型时,需要用到 var 关键字和对象初始化语法. var : 编译器会在编译时自动生成新类定义(我们无法在C#代码中看到类的名称). 初始化:它将告诉编译器为新创建的类型创建私有的后台字段和(只读的)属性. 通过传递参数构建一个匿名类型,并打印相关信息 private static void BiuldAnonymousType(string mak

编写高质量代码改善C#程序的157个建议——建议26:使用匿名类型存储LINQ查询结果

建议26:使用匿名类型存储LINQ查询结果 从.NET3.0开始,C#开始支持一个新特性:匿名类型.匿名类型有var.赋值运算符和一个非空初始值(或以new开头的初始化项)组成.匿名类型有如下基本特性: 即支持简单类型也指出复杂类型.简单类型必须是一个非空初始值,复杂类型则是一个以new开头的初始化项. 匿名类型的属性是只读的,没有属性设置器,它一旦被初始化就不可更改. 如果两个匿名类型的属性值相同,那么就认为这两个匿名类型相等. 匿名类型可以再循环中用作初始化器. 匿名类型支持智能感知. 匿名

C#超级实用的一种类型—匿名类型

顾名思义 匿名类型就是没有名字的类型.当一个新的匿名对象定义与前面已经存在的类型定义的内部变量类型相同时,编译器就会只生成一个类定义,而不是各一个.匿名类型对象中仍然可以再包含匿名对象. 在C#3.0中允许我们在程序中声明一个临时的类型来存储数据,例如: class Program { static void Main(string[] args) { //声明一个匿名对象,拥有 Name和Age 属性 var obj = new { Name = "Joey", Age = 25 }

C#超级有用的一种类型—匿名类型

顾名思义 匿名类型就是没有名字的类型.当一个新的匿名对象定义与前面已经存在的类型定义的内部变量类型同样时,编译器就会仅仅生成一个类定义,而不是各一个. 匿名类型对象中仍然能够再包括匿名对象. 在C#3.0中同意我们在程序中声明一个暂时的类型来存储数据,比如: class Program { static void Main(string[] args) { //声明一个匿名对象,拥有 Name和Age 属性 var obj = new { Name = "Joey", Age = 25