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

news2024/12/24 2:13:23

.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 failure
    2. Modify your selections for the affected workloads or components and then retry the installation
    3. Remove the product from your machine and then install again

If 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 URL
        https://aka.ms/VSSetupErrorReports?q=PackageId=Microsoft.VisualCpp.Redist.14;PackageAction=Install;ReturnCode=-2147023274
    Details
        Command 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: -2147023274
        Return 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.coloradmin.cn/o/1627218.html

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

相关文章

淘宝图片搜索API接口:技术原理、使用方法与最佳实践指南

淘宝图片搜索API接口技术详解 在数字化时代&#xff0c;图片搜索已经成为一种高效、直观的信息检索方式。淘宝作为国内最大的电商平台&#xff0c;其图片搜索API接口对于提高购物体验和商家运营效率具有重要意义。本文将详细解析淘宝图片搜索API接口的技术原理、使用方法和注意…

43. UE5 RPG 实现敌人血量显示条

在上一篇文章中&#xff0c;我们实现了火球术伤害功能&#xff0c;在火球击中敌方目标&#xff0c;可以降低敌人20的血量&#xff0c;这个值现在是固定的&#xff0c;后面我们会修改火球的伤害设置。接着&#xff0c;我们也测试了功能是实现的&#xff0c;但是在正常的游玩过程…

【QA】Git的底层原理

前言 本文通过一个简单的示例&#xff0c;来理解Git的底层原理。 示例 1、新建本地仓库并上传第一个文件 相关步骤&#xff1a; 新建仓库及创建文件查看文件状态将文件添加到暂存区将文件提交到本地仓库 HMTeenLAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-…

工厂模式(二)

一、简单工厂 package com.xu.demo.factoryPattern;/*** 简单工厂模式类*/ public class SimpleFactoryPattern {public static Phone create(String name) {//根据输入对象名称判断返回相匹配的对象if("IPhone".equals(name)) {//返回对象return new IPhone();}else…

Swift - 流程控制

文章目录 Swift - 流程控制if-else2. while3. for3.1 闭区间运算符3.2 半开区间运算符3.3 for - 区间运算符用在数组上3.3.1 单侧区间 3.4 区间类型3.5 带间隔的区间值 4. switch4.1 fallthrough4.2 switch注意点 5. 复合条件6. 区间匹配、元组匹配7. 值绑定8. where9. 标签语句…

网络安全培训对软件开发人员的重要性

微信搜索关注&#xff1a;网络研究观 阅读获取更多信息。 组织所经历的持续不断的网络威胁没有任何放缓的迹象&#xff0c;使得实现有效安全的任务变得越来越具有挑战性。 根据最新的 Verizon 数据泄露调查报告&#xff0c;2023 年高级攻击增加了 200% 以上。 IBM 数据泄露成…

第一阶段--Day2--信息安全法律法规、网络安全相关标准

目录 1. 针对信息安全的规定 2. 网络安全相关标准 1. 针对信息安全的规定 《中华人民共和国计算机信息系统安全保护条例》1994年2月18日颁布并实施 中华人民共和国计算机信息系统安全保护条例__增刊20111国务院公报_中国政府网 《中华人民共和国国际联网安全保护管理…

Web前端一套全部清晰 ② day2 HTML 标签之文字排版,图片、链接、音视频链接

虽然辛苦&#xff0c;我还是会选择那种滚烫的人生 —— 24.4.25 HTML初体验 1.HTML定义 HTML 超文本标记语言 超文本 —— 链接 标记 —— 标记也叫标签&#xff0c;带尖括号的文本 标签语法 开始标签 需要加粗的文字 结束标签 标签成对出现&#xff0c;中间包裹内容 <>里…

Vue3+ts(day03:ref和reactive)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈&#xff08;笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】&#xff0c;记录一下学习笔记&#xff0c;用于自己复盘&#xff0c;有需要学…

SnapGene Mac v5.3.1中文激活版:综合性分子生物学软件

SnapGene Mac是一款功能全面、操作便捷的综合性分子生物学软件&#xff0c;专为Mac用户打造。它集成了DNA序列编辑、分析、可视化和团队协作等多种功能&#xff0c;为科研人员提供了一个高效、可靠的分子生物学研究工具。 SnapGene Mac v5.3.1中文激活版下载 在SnapGene Mac中&…

JPEG图像常用加密算法简介

JPEG图像加密算法 目前&#xff0c;JPEG图像加密算法可以分成异或加密、置乱加密和置乱与异或组合加密。下面对这三种加密方式进行阐述。 (1) 异或加密 文献[1]提出了一种基于异或加密的JPEG图像的RDH-EI方案。该算法通过对AC系数的ACA和图像的量化表进行流密码异或&#xf…

Spring Boot 3.2.5 集成 MyBatisPlus

前置条件&#xff0c;先连接好数据库&#xff0c;并且数据库里新建表插入几条数据 连接mysql传送门 版本 Spring Boot 3.2.5 第一步&#xff0c;添加依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-start…

神经网络的激活函数

目录 神经网络 激活函数 sigmoid 激活函数 tanh 激活函数 backward方法 relu 激活函数 softmax 激活函数 神经网络 人工神经网络&#xff08; Artificial Neural Network&#xff0c; 简写为ANN&#xff09;也简称为神经网络&#xff08;NN&#xff09;&#xff0c…

FANUC机器人SOCKET连接指令编写

一、创建一个.KL文件编写连接指令 创建一个KL文本来编写FANUC机器人socket连接指令 二、KAREL指令代码 fanuc机器人karel编辑器编辑的karel代码如下&#xff1a; PROGRAM SM_CON %COMMENT SOCKET连接 %STACKSIZE 4000 --堆栈大小 %INCLUDE klevccdfVAR status,data_type,in…

Unreal Engine创建Plugin

打开UE工程&#xff0c;点击编辑&#xff0c;选择插件 点击“新插件”按钮&#xff0c;选择“空白选项”填入插件名字"MultiPlayerPlugin"&#xff0c;填入插件作者、描述&#xff0c;点击“创建插件”按钮打开C工程&#xff0c;即可看到插件目录&#xff0c;编译C工…

【介绍下如何使用CocoaPods】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

vue与Spring boot数据交互例子【简单版】

文章目录 什么是Vue&#xff1f;快速体验Vueaxios是什么&#xff1f;向Springboot后端发送数据接收Springboot后端数据小结 什么是Vue&#xff1f; 官网解释&#xff1a;Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上…

BUUCTF_[BSidesCF 2020]Had a bad day

[BSidesCF 2020]Had a bad day 1.一看题目直接尝试文件包含 2.直接报错&#xff0c;确实是存在文件包含漏洞 http://307b4461-36d6-443f-879a-68803a57f721.node5.buuoj.cn:81/index.php?categoryphp://filter/convert.base64-encode/resourceindex strpos() 函数查找字符串…

【Linux】:文件查看 stat、cat、more、less、head、tail、uniq、wc

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Linux深造日志 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、stat&#xff08;查看文件详细属性信息&#xff09;1.1 内容解析&#xff1a;1.2…

【基础篇】Git 基础命令与核心概念

✅作者简介&#xff1a;大家好&#xff0c;我是小杨 &#x1f4c3;个人主页&#xff1a;「小杨」的csdn博客 &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; 一&#xff0c;Git 初识 1.1&#xff0c;问题引入 不知道你工作或学习时&#xff0c;有没有遇到…