linq

c# 解析JSON的几种办法

有些话、适合烂在心里 提交于 2020-10-28 20:44:59
对比 .NET下几种常见的解析JSON方法 主要类 命名空间 限制 内建LINQ支持 DataContractJsonSerializer System.Runtime.Serialization.Json 通用 否 JavaScriptSerializer System.Web.Script.Serialization 只能在Web环境使用 否 JsonArray 、 JsonObject 、 JsonValue System.Json 只能在Silverlight中使用 是 JsonConvert 、 JArray 、 JObject 、 JValue 、 JProperty Newtonsoft.Json 通用 是(推荐使用) 准备数据 实体类: [DataContract] public class Person { [DataMember(Order = 0, IsRequired = true)] public string Name { get; set; } [DataMember(Order = 1)] public int Age { get; set; } [DataMember(Order = 2)] public bool Alive { get; set; } [DataMember(Order = 3)] public string[]

C#基础提升系列——C# LINQ

*爱你&永不变心* 提交于 2020-10-28 09:32:20
C# LINQ LINQ(Language Integrated Query,语言集成查询)。在C# 语言中集成了查询语法,可以用相同的语法访问不同的数据源。 命名空间 System.Linq 下的类 Enumerate 中定义了许多LINQ扩展方法,用于可以在实现了 IEnumerable<T> 接口的任意集合上使用LINQ查询。 扩展方法 C#扩展方法在静态类中声明,定义为一个静态方法,其中第一个参数定义了它扩展的类型,扩展方法必须对第一个参数使用 this 关键字。 public static class StringExtension { public static void WriteLine ( this string str ) { Console . WriteLine ( str ); } } 调用方式有两种: //方式一 "测试" . WriteLine (); //方式二 StringExtension . WriteLine ( "测试二" ); 采用方式一的方式调用,需要导入该扩展方法所在类的命名空间即可。在使用LINQ时,需要导入 System.Linq 命名空间。 示例实体定义 为了更好的说明LINQ的使用, 我们将使用具体的示例进行说明,在该示例中,分别定义如下几个实体: Racer.cs:该类用来显示赛车手信息 public class Racer

在C#中重复字符的最佳方法

南笙酒味 提交于 2020-10-27 14:07:05
问题: What it's the best way to generate a string of \\t 's in C# 在C#中生成 \\t 字符串的最佳方法是什么 I am learning C# and experimenting with different ways of saying the same thing. 我正在学习C#,并尝试用不同的方式说同一件事。 Tabs(uint t) is a function that returns a string with t amount of \\t 's Tabs(uint t) 是一个函数,该函数返回 t 等于 \\t 的 string For example Tabs(3) returns "\\t\\t\\t" 例如 Tabs(3) 返回 "\\t\\t\\t" Which of these three ways of implementing Tabs(uint numTabs) is best? 这三种实现 Tabs(uint numTabs) 方式中哪一种最好? Of course that depends on what "best" means. 当然,这取决于“最佳”的含义。 The LINQ version is only two lines, which is nice.

Android Retrofit2.0+RxJava3.0 基本使用

ぐ巨炮叔叔 提交于 2020-10-27 12:48:58
一,ReactiveX 要学习RxJava,那么不得不提他的由来ReactiveX,ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。ReactiveX是Reactive Extensions的缩写,一般简写为Rx,最初是LINQ的一个扩展,由微软的架构师Erik Meijer领导的团队开发; 二,Rx的发展 Rx这几年非常流行,以至于开发出多种语言版本,例如RxJava 、 RxGo 、RxJS、RxKotlin、 RxPY 、 Rx.NET 等等;Rx的大部分语言库由ReactiveX这个组织负责维护,社区网站是 reactivex.io 。 三,RxJava RxJava是响应式编程(Reactive Extensions)的java实现,它基于观察者模式的实现了异步编程接口。 Rxjava 3.x 的 github官网 ; Rxjava 3.0的一些改变: 官方Wiki ; Rxjava 3.x 文档可以在 官方javadoc 中找到 1,Retrofit + RxJava3组合使用 首先要引入依赖 implementation "io.reactivex.rxjava3:rxjava:3.0.0" implementation 'io.reactivex:rxandroid:1.2.1'

api接口返回动态的json格式?我太难了,尝试一下 linq to json

十年热恋 提交于 2020-10-25 21:46:04
一:背景 1. 讲故事 前段时间和一家公司联调api接口的时候,发现一个奇葩的问题,它的api返回的json会动态改变,简化如下: {"Code":101,"Items":[{"OrderTitle":"订单1"}]} {"Code":102,"Items":[{"ProductTitle":"商品1"}]} 逻辑是这样的: Items 中的内容会随的 Code 的改变而改变,里面有可能是订单列表又有可能是商品列表,习惯弱类型的朋友看这种json太正常不过了,但对于强类型的我们来说,简直就是一个大写的奇葩,你这让我用什么强类型反序列化呢???,如果还没理解,请看下面的这张图吧! 经过沟通,对方果然用的是弱类型的php,磨了半天,说服让对方改了返回结构,这样就可以直接用固有类匹配。 二:寻找解决办法 从业务上来说,能说服对方让步那是最好的,但从技术上来说,这种场景有什么好的解决办法呢? 问题的本质就是json是动态的,你反序列化的时候无法指定匹配类。 1. 使用 dynamic 既然是动态的,那C#中也有一个动态类型 dynamic,何不用它来做json中动态变化的那部分的接受值,将 items 定义为 dynamic。如下图: 从图中看: rsp.Items as List<OrderItem> 返回是null,尝试失败,虽然转化失败了,但我相信你也看到了 Newtonsoft

lambda高级查询

家住魔仙堡 提交于 2020-10-25 19:41:36
1. 什么是 lambda 表达式 Lambda 表达式,是一种简化的匿名函数,可用于创建委托或表达式目录树。 其次,也可以将 Lambda 表达式作为参数进行传递,或者将它作用于函数调用值调用后返回的一个函数来使用。 经常在 LINQ 中使用 Lambda 表达式。 2. Lambda 的组成 3. Lambda 表达式 表达式在 => 运算符右侧,称“lambda 表达式”。lambda 表达式常用于 LINQ 和构建表达式树,它也允许返回结果。 基本形式: ( 输入参数 ) => 表达式 。 1) ( ) => true; 2) x => x == 1; 3) (x) => x == 1; 4) (x, y) => x == y; 当 lambda 表达式有且只有一个输入参数的时侯,括号(“()”)才是可选的。 括号内存在多个输入参数时使用“,”进行分割。 也可以选择显式指定类型,一般只有在编译器难以或无法准确推断输入类型的时候。 4. Lambda 语句 lambda 语句和上面的 lambda 表达式相比,只是多了个大括号(“{ }”)。   基本形式: ( 输入参数 ) => { 表达式 } 。 5. 异步 Lambda 通过 async 和 await 关键字,我们可以很简单并快速的创建包含异步处理的 lambda 表达式和语句。 1) Async 2) Await

C# Web大文件分片上传/多线程上传

天大地大妈咪最大 提交于 2020-10-24 16:05:47
ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现。 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压。 ASP.NET页面设计:TextBox和Button按钮。 TextBox中需要自己受到输入文件夹的路径(包含文件夹),通过Button实现选择文件夹的问题还没有解决,暂时只能手动输入。 两种方法:生成rar和zip。 1.生成rar using Microsoft.Win32; using System.Diagnostics; protected void Button1Click(object sender, EventArgs e) { RAR(@"E:\95413594531\GIS", "tmptest", @"E:\95413594531\"); } /// /// 压缩文件 /// /// 需要压缩的文件夹或者单个文件 /// 生成压缩文件的文件名 /// 生成压缩文件保存路径 /// protected bool RAR(string DFilePath, string DRARName,string DRARPath) { String therar; RegistryKey theReg; Object theObj; String theInfo;

NetCore 基于identity的登录验证授权机制

被刻印的时光 ゝ 提交于 2020-10-24 14:43:49
十年河东,十年河西,莫欺少年穷 学无止境,精益求精 本篇探讨下基于NetCore_2.1版本的登录验证授权机制, 学过MVC的童鞋们都知道,Form验证中,MVC中采用的是FormTicket的验证授权机制,那么在NetCore中怎么实现登录验证授权呢? 其实我们在Asp.Net Core项目中的认证,也是比较简单的。现在我们就通过构建一个小项目来一步步来探讨,并最终实现NetCore的登录验证及授权。 1、新建一个解决方案(NetCoreAuth),该解决方案中包含五个项目,如下: 1.1、项目NetCoreAuth是一个MVC项目,通过VS直接创建即可,我们称之为:UI层 1.2、项目NetCoreInterface是接口层,我们都知道NetCore通过依赖注入来进行代码解耦,因此,接口层是必不可少的 1.3、项目NetCoreService是实现接口的服务层,用于依赖注入时,构建和接口的映射关系,也是必不可少的一层 1.4、项目NetCoreModels是一个Model层,一般项目中,用来构建数据DTO,因此,可以说也是必不可少的一层 1.5、项目NetCoreCommon是一个公共方法层,用于存放通用类,通用枚举,静态变量等 2、项目构建完毕后,我们先来完善 除 NetCoreAuth层(UI层)之外的代码 2.1、项目NetCoreCommon层很简单,只有一个类