.net报错异常及常用功能处理总结(持续更新)

news/2024/5/20 9:44:21

@

目录
  • 1. WebApi dynamic传参解析结果中ValueKind = Object处理方法
      • 问题描述
      • 方案1:(推荐,改动很小)
      • 方案2:
  • 2.C# .net多层循环嵌套结构数据对象如何写对象动态属性赋值
      • 问题描述
      • JavaScript动态属性赋值
      • .net动态属性赋值
  • 3.Object.GetType().GetProperty().GetValue()读取对象报错,无法获取Json转化对象的属性和值怎么办,。net C# .GetType().GetProperties()报错失效
      • 问题描述
      • 解决方案
  • 4.如何循环各种类型的对象数据?
      • 问题描述
      • 解决方案1 类型:new{} new出来的自定义对象
      • 解决方案2 类型:System.Collections.Generic.Dictionary`2[System.String,System.Object]
      • 解决方案3 类型:Newtonsoft.Json.Linq.JObject
  • 5. C# .net如何获取某个对象的类型,GetType() typeof() is的区别
      • 获取:通过GetType()方法来获取对象的类型
      • 对比方案1:通过typeof()来判断是否是这个类型
      • 对比方案2:is关键字
  • 6.couldnt install microsoft.visualcpp.redist.14
      • 解决方案1
      • 解决方案2
      • 欢迎路过的小哥哥小姐姐们提出更好的意见哇~~

1. WebApi dynamic传参解析结果中ValueKind = Object处理方法

问题描述

  • WebApi dynamic传参解析结果中ValueKind处理方法
  • System.Text.Json类库进行json转化时 ValueKind:Object 问题
  • .NET dynamic传参中带有ValueKind属性处理方法
  • 动态 c# ValueKind = Object
  • 前端传参给后端以后,发现接受到的参数是这个样子ValueKind = Object : "{"TEST":{"A":1}}"

方案1:(推荐,改动很小)

备注: 数据解析以后如果有循环问题,可以参考下面的问题4

dynamic dynParam = JsonConvert.DeserializeObject(Convert.ToString(params));

方案2:

将默认的序列化程序System.Text.Json替换为Newtonsoft.Json

  • 1.NuGet引入包:Microsoft.AspNetCore.Mvc.NewtonsoftJson
  • 2.Startup添加命名空间:using Newtonsoft.Json.Serialization;
  • 3.Startup类的ConfigureServices方法中添加代码:
//添加对象序列化程序为Newtonsoft.Json
services.AddControllers().AddNewtonsoftJson(options =>
{options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});

2.C# .net多层循环嵌套结构数据对象如何写对象动态属性赋值

问题描述

下面是一个案例,根据anonymousObject 的属性,动态赋值projectEntity的属性,且对象为一个多层嵌套结构,因为我平时写js比较多,平时使用JavaScript函数搞对象动态赋值比较多,当转化为.net代码后,我们可以看一下对比:

JavaScript动态属性赋值

function UpdateXiaojinTestVaue() {const TestBool = {NotRequired: 0,Required: 1,};var anonymousObject = {OneXiaojinTest: {One: TestBool.NotRequired,Two: TestBool.NotRequired,Three: TestBool.NotRequired,Four: TestBool.NotRequired,Five: TestBool.Required,},TwoXiaojinTest: {One: TestBool.NotRequired,Two: TestBool.NotRequired,Three: TestBool.Required,},};var projectEntity = {XiaojinTest: {OneXiaojinTest: {One: TestBool.Required,Two: TestBool.Required,Three: TestBool.Required,Four: TestBool.Required,Five: TestBool.Required,},TwoXiaojinTest: {One: TestBool.NotRequired,Two: TestBool.NotRequired,Three: TestBool.Required,},a: { aa: TestBool.Required },b: { bb: TestBool.Required },},};Object.keys(anonymousObject).forEach(function (key) {Object.keys(anonymousObject[key]).forEach(function (key2) {if (projectEntity.XiaojinTest[key]) {projectEntity.XiaojinTest[key][key2] = anonymousObject[key][key2];console.log(anonymousObject[key])console.log('-----------------------')console.log(anonymousObject[key])console.log('+++++++++++++++++++++++++++++++++++++')}});});console.log(projectEntity)
}
UpdateXiaojinTestVaue()

.net动态属性赋值

UpdateTriggerControlVaue JS 转换为.NET C#代码,转化后

using System;
using System.Collections.Generic;public class TestBool
{public const int NotRequired = 0;public const int Required = 1;
}public class Program
{public static void Main(){UpdateXiaojinTestValue();}public static void UpdateXiaojinTestValue(){var anonymousObject = new{OneXiaojinTest = new{One = TestBool.NotRequired,Two = TestBool.NotRequired,Three = TestBool.NotRequired,Four = TestBool.NotRequired,Five = TestBool.Required},TwoXiaojinTest = new{One = TestBool.NotRequired,Two = TestBool.NotRequired,Three = TestBool.Required,},};var projectEntity = new{XiaojinTest = new{OneXiaojinTest = new{One = TestBool.Required,Two = TestBool.Required,Three = TestBool.Required,Four = TestBool.Required,Five = TestBool.Required,Requirement = TestBool.Required,Testing = TestBool.Required,ThirdParthDueDiligence = TestBool.Required,},TwoXiaojinTest = new{One = TestBool.NotRequired,Two = TestBool.NotRequired,Three = TestBool.Required,},a = new { aa = TestBool.Required },b = new { bb = TestBool.Required },},};foreach (var key in anonymousObject.GetType().GetProperties()){var subAnonymousObject = key.GetValue(anonymousObject);foreach (var key2 in subAnonymousObject.GetType().GetProperties()){if (projectEntity.XiaojinTest.GetType().GetProperty(key.Name)?.GetValue(projectEntity.XiaojinTest) is not null){var targetSubObject = projectEntity.XiaojinTest.GetType().GetProperty(key.Name).GetValue(projectEntity.XiaojinTest);targetSubObject.GetType().GetProperty(key2.Name)?.SetValue(targetSubObject, key2.GetValue(subAnonymousObject));Console.WriteLine(subAnonymousObject);Console.WriteLine("-----------------------");Console.WriteLine(subAnonymousObject);Console.WriteLine("+++++++++++++++++++++++++++++++++++++");}}}Console.WriteLine(projectEntity);}
}

3.Object.GetType().GetProperty().GetValue()读取对象报错,无法获取Json转化对象的属性和值怎么办,。net C# .GetType().GetProperties()报错失效

问题描述

接上题,正常情况下,声明的对象可以使用Object.GetType().GetProperty().GetValue()或者.GetType().GetProperties()读取属性和值,但是如果是JSON格式,读取就会有异常,如何处理呢?

解决方案

 var result = JsonConvert.DeserializeObject<IDictionary<string, object>>(Convert.ToString(params));foreach (var item in result.Keys){var value = result[item];Console.WriteLine("------item----------------");Console.WriteLine(item);Console.WriteLine("------value----------------");Console.WriteLine(value);}

4.如何循环各种类型的对象数据?

问题描述

第一步先通过GetType()方法来获取对象的类型,根据数据类型不同,循环方法也不一样,下面是我今天熬夜到凌晨四点多总结出来的结果,原谅我是一个JS爱好者,第一次搞这个遇到了很多问题,所以真的是熬死我:

  • (GetType) 获取动态Json对象属性值的方法
  • .net获取动态属性值的方法

解决方案1 类型:new{} new出来的自定义对象

 // 对象类型01// -- 类型:new{} new出来的自定义对象// -- 获取属性:key.Name// -- 获取值:key.GetValue(params)// -- 循环方法:foreach (var key in xiaojinObject.GetType().GetProperties()) foreach (var key in anonymousObject.GetType().GetProperties()){var subAnonymousObject = key.GetValue(anonymousObject);foreach (var key2 in subAnonymousObject.GetType().GetProperties()){if (projectEntity.XiaojinTest.GetType().GetProperty(key.Name)?.GetValue(projectEntity.XiaojinTest) is not null){var targetSubObject = projectEntity.XiaojinTest.GetType().GetProperty(key.Name).GetValue(projectEntity.XiaojinTest);targetSubObject.GetType().GetProperty(key2.Name)?.SetValue(targetSubObject, key2.GetValue(subAnonymousObject));Console.WriteLine(subAnonymousObject);Console.WriteLine("-----------------------");Console.WriteLine(subAnonymousObject);Console.WriteLine("+++++++++++++++++++++++++++++++++++++");}}}

解决方案2 类型:System.Collections.Generic.Dictionary`2[System.String,System.Object]

// 对象类型02// -- 类型:System.Collections.Generic.Dictionary`2[System.String,System.Object]// -- 获取属性:key// -- 获取值:params[key]// -- 循环方法:foreach (var key in xiaojinObject.Keys) 

解决方案3 类型:Newtonsoft.Json.Linq.JObject

// 对象类型03// -- 类型:Newtonsoft.Json.Linq.JObject// -- 获取属性:item.Name// -- 获取值:item.Value// -- 循环方法:foreach (JProperty item in xiaojinObject.Properties())

5. C# .net如何获取某个对象的类型,GetType() typeof() is的区别

获取:通过GetType()方法来获取对象的类型

Console.WriteLine("------11----------------");
Console.WriteLine(anonymousObject.GetType());
Console.WriteLine("---------------22--------");
Console.WriteLine(subAnonymousObject.GetType());

对比方案1:通过typeof()来判断是否是这个类型

if (abc.GetType() == typeof(Double))//判断abc是否是Double类型
{Console.WriteLine("abc是Double类型");
}

对比方案2:is关键字

// 格式
[——要判断的对象——] is [——要判断的数据类型——]// 举例
if (abc is Double)//判断abc是否是双精度浮点类型{Console.WriteLine("abc是Double类型");}

6.couldnt install microsoft.visualcpp.redist.14

Something went wrong with the install.You can troubleshoot the package failures by:1. Search for solutions using the search URL below for each package failure2. Modify your selections for the affected workloads or components and then retry the installation3. Remove the product from your machine and then install againIf the issue has already been reported on the Developer Community, you can find solutions or workarounds there. If the issue has not been reported, we encourage you to create a new issue so that other developers will be able to find solutions or workarounds. You can create a new issue from within the Visual Studio Installer in the upper-right hand corner using the "Provide feedback" button.================================================================================Package 'Microsoft.VisualCpp.Redist.14,version=14.38.33130,chip=x86' failed to install.Search URLhttps://aka.ms/VSSetupErrorReports?q=PackageId=Microsoft.VisualCpp.Redist.14;PackageAction=Install;ReturnCode=-2147023274DetailsCommand executed: "c:\windows\syswow64\\windowspowershell\v1.0\powershell.exe" -NoLogo -NoProfile -Noninteractive -ExecutionPolicy Unrestricted -InputFormat None -Command "& """C:\ProgramData\Microsoft\VisualStudio\Packages\Microsoft.VisualCpp.Redist.14,version=14.38.33130,chip=x86\VCRedistInstall.ps1""" -PayloadDirectory """C:\ProgramData\Microsoft\VisualStudio\Packages\Microsoft.VisualCpp.Redist.14,version=14.38.33130,chip=x86""" -Architecture x86 -Logfile """C:\Users\XX\AppData\Local\Temp\dd_setup_20240119115035_255_Microsoft.VisualCpp.Redist.14.log"""; exit $LastExitCode"Return code: -2147023274Return code details: Error opening installation log file. Verify that the specified log file location exists and that you can write to it.Log

解决方案1

  • 找到这个目录C:\ProgramData\Microsoft\VisualStudio\Packages
  • 直接搜索VC_redist关键词
  • 找到这个VC_redist.x64.exe文件,一般会有两个,直接全部双击安装
  • 返回VS installer 界面点击:更多—修复


解决方案2

  • 当遇到报错,点击错误信息下面的查看日志选项,打开日志文件(就像上面粘贴的那些异常信息)
  • 在错误日志中寻找安装文件的路径,类似于:C:\ProgramData\Microsoft\VisualStudio\Packages\Microsoft. visualcp . redist .14. latest,version=xx.xx.xxxxx
  • 打开此路径位置
  • 看到一个VC redist.xxx.exe
  • 安装运行它
  • 关机重启
  • 重新运行VS installer 界面点击:更多—修复

  • 今天就写到这里啦~
  • 小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
  • 大家要天天开心哦

欢迎大家指出文章需要改正之处~
学无止境,合作共赢

在这里插入图片描述

欢迎路过的小哥哥小姐姐们提出更好的意见哇~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/25447.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

百度昆仑、华为NPU

百度昆仑、华为NPU 为智能计算而生的昆仑芯XPU架构 昆仑芯科技团队于2017年在Hot Chips上发布自研的、面向通用AI计的芯片核心架构——昆仑芯XPU。 集十余年AI加速研发实践,昆仑芯XPU从AI落地的实际需求出发,按照复杂前沿的人工智能场景需求开展迭代, 致力为开发者提供通用、…

计算机(电脑)硬件组成基本介绍4

详细介绍的计算机(电脑)硬件组成.电源插座为主板提供供电的电源接口目前,主板电源接口插座主要采用ATX电源接口, ATX电源接口一般为24针电源插座、8 针电源插座、4针电源插座等,主要为主板提供5V、 12V、3.3V 电压等. ATX 电源都支持软件关机功能。目前,双核CPU 主板上的…

计算机(电脑)硬件组成基本介绍3

详细介绍的计算机(电脑)硬件组成.重要接口SATA连接大容量存储设备的SATA接口SATA (Serial ATA)接口即串行ATA,它是目前硬盘采用的一种新型的接口类型。SATA接口主要采用连续串行的方式传输数据,这样在同一时间点内只会有1位数据传输,此做法能减小接口的针脚数目,用4个针…

计算机(电脑)硬件组成基本介绍1

详细介绍的计算机(电脑)硬件组成。目录目录操作系统与硬件及应用程序软件的关系电脑各个设备之间关系 如何评价一台电脑? 通过CPU型号看性能 通过 CPU 主频评价 通过内存容量评价 通过显卡芯片及显存容量评价 通过显示器评价 中央处理器 存储器 输入设备 输出设备 接口…

Ubuntu24.04系统Docker安装nextcloud+onlyoffice

1.Ubuntu系统下载 Ubuntu镜像站大全 我用的是山东大学的镜像站 我下的是desktop版本就是有GUI图形界面,如果不需要可以下载server版本2.开启SSH启用root用户远程登陆 由于我使用远程工具MobaXterm进行连接,所以安装完系统后需要开启SSH,如果你不需要使用远程工具远程可以跳过…

WindowsPE重装Windows系统详细介绍

本文详细介绍了WindowsPE、UEFI BIOS、如何制作WindowsPE、网络唤醒WOL、如何格式化硬盘及分区 、GHost还原数据、驱动程序分类相关知识目录目录理论知识 什么是WindowsPE? 什么是UEFI BIOS?(简)实操 如何制作WindowsPE? 如何进入BIOS? 常用项介绍 设置U盘启动 网络…

存储器数据恢复相关知识

讲述硬盘基本结构及其储存理论,介绍如何恢复常用存储器数据。目录目录理论知识 硬盘如何储存数据? 磁道和扇区简介 盘面号 磁道 柱面 扇区 硬盘如何读写数据? 数据删除原理 数据如何丢失的? 人为原因造成的数据丢失: 自然灾害造成的数据丢失: 软件原因造成…

构建RAG应用-day05: 如何评估 LLM 应用 评估并优化生成部分 评估并优化检索部分

评估 LLM 应用 1.一般评估思路 首先,你会在一到三个样本的小样本中调整 Prompt ,尝试使其在这些样本上起效。 随后,当你对系统进行进一步测试时,可能会遇到一些棘手的例子,这些例子无法通过 Prompt 或者算法解决。 最终,你会将足够多的这些例子添加到你逐步扩大的开发集中…