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

news/2024/11/14 4:40:09/

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

    • 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.ppmy.cn/news/1445096.html

相关文章

CentOS 7 安装 Puppeteer Google Chrome

由于需要使用到了 Puppeteer 功能&#xff0c;安装了多次失败而告终。最终找到了一个可以安装成功的方式&#xff0c;特此记录下来。 安装 Puppeteer 需要注意 Node.js 版本&#xff0c;我使用的是 16.x cnpm i puppeteer安装 Google Chrome 这里需要注意的一下是&#xff0c;…

介绍一个在数据分析中常用的函数:data.iloc[]

平时处理数据集中&#xff0c;总是需要选中一些列的数据&#xff0c;去预测其他列的数据&#xff0c;所以data.iloc[]&#xff0c;在数据分析中显得尤为方便。 介绍一下data.iloc[] data.iloc[] 是 Python 中 pandas 库的一个非常有用的功能&#xff0c;它允许你通过行和列的…

windows上通过定时任务提交新增文件到SVN(bat双击可执行,但是通过定时任务后无法提交到svn)

这个要必须记录一下了&#xff0c;因为折腾了蛮久断断续续加起来花费的有一天多时间。因为这个跟上篇定时备份是一个事来的&#xff0c;备份完了不可能留在跟数据库相同的机器吧&#xff0c;这样的话也起不到备份的作用啊&#xff0c;所以就想着让它每天去定时备份&#xff0c;…

【算法每日一练】动态规划,图论(换根dp)会议 ,医院设置

目录 题目&#xff1a; 会议 思路&#xff1a; 题目&#xff1a;医院设置 思路&#xff1a; 题目&#xff1a; 会议 思路&#xff1a; 首先&#xff0c;阅读题目可以看出来&#xff0c;这道题目实际上就是求树的重心。 树的重心&#xff1a; 定义&#xff1a;找到一个点&a…

ES全文检索支持拼音和繁简检索

ES全文检索支持拼音和繁简检索 1. 实现目标2. 引入pinyin插件2.1 编译 elasticsearch-analysis-pinyin 插件2.2 安装拼音插件 3. 引入ik分词器插件3.1 已有作者编译后的包文件3.2 只有源代码的版本3.3 安装ik分词插件 4. 建立es索引5.测试检索6. 繁简转换 1. 实现目标 ES检索时…

AI系列:大语言模型的RAG(检索增强生成)技术(上)

前言 大型语言模型&#xff08;LLM&#xff09;虽然在生成文本方面表现出色&#xff0c;但仍然存在一些局限性&#xff1a;数据是静态的&#xff0c;而且缺乏垂直细分领域的知识。为了克服这些限制&#xff0c;有时候会进行进一步的模型训练和微调。在实际应用中&#xff0c;我…

商超物联网方案-人员和资产管理配置指南~配置人员和资产管理示例

配置人员和资产管理示例 组网图形 图1 配置人员和资产管理示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 某商场经常发现资产遗失或寻找不到。为降低财产损失&#xff0c;商场希望能统一监控资产所在位置和移动路径&#xff0c;以便掌握…

【Redis 开发】Redis分片集群

分片集群 分片集群搭建分片集群 散列插槽集群伸缩故障转移RedisTemplate访问分片集群 分片集群 在我们使用哨兵进行高并发读的问题&#xff0c;但是还有海量数据存储,高并发写的问题,使用分片集群可以解决&#xff1a; 特征&#xff1a; 集群中有多个master&#xff0c;每个m…