对于System.Text.Json使用c#.netcore3.1访问json对象的Json对象感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍访问json对象内容,并为您提供关于asp.net
对于System.Text.Json使用c#.net core 3.1访问json对象的Json对象感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍访问json对象内容,并为您提供关于asp.net-mvc – Ajax.BeginForm,调用操作,返回JSON,如何在我的OnSuccess JS函数中访问JSON对象?、C# 通过Dynamic访问System.Text.Json对象、C#-将Newtonsoft.Json迁移到System.Text.Json、Delphi:访问JSON数组中的JSON对象的有用信息。
本文目录一览:- System.Text.Json使用c#.net core 3.1访问json对象的Json对象(访问json对象内容)
- asp.net-mvc – Ajax.BeginForm,调用操作,返回JSON,如何在我的OnSuccess JS函数中访问JSON对象?
- C# 通过Dynamic访问System.Text.Json对象
- C#-将Newtonsoft.Json迁移到System.Text.Json
- Delphi:访问JSON数组中的JSON对象
System.Text.Json使用c#.net core 3.1访问json对象的Json对象(访问json对象内容)
{{'orderNo':123456}}
不是有效的 Json 文档,您应该尝试更改来自 API 的数据。如果你不能这样做,你需要在将字符串解析为对象之前去掉外面的一对大括号。
asp.net-mvc – Ajax.BeginForm,调用操作,返回JSON,如何在我的OnSuccess JS函数中访问JSON对象?
如何在我的OnComplete js函数中访问JSON对象?
所以我的Ajax.BeginForm看起来像这样…
using (Ajax.BeginForm("Coupon",new AjaxOptions { OnSuccess = "CouponSubmitted" }))
和我的OnSuccess功能看起来像这样…
function CouponSubmitted() { var data = response.get_response().get_object(); alert(data.success); }
我也试过…
function CouponSubmitted(data) { alert(data.success); }
我的控制器“Coupon”返回这个…
return Json(new { success = false,nameError = nameError,emailError = emailError });
关于如何访问Json的任何想法可以返回?
解决方法
function OnSuccess(e) { //function CouponSubmitted(data) in the question var json = e.get_response().get_object(); alert(json.success); }
这就是AJAX.BeginForm OnSuccess回调函数所希望的,可以让你的JSON返回。
希望通过记录下来的“功能”,我可以饶恕别人吗?
C# 通过Dynamic访问System.Text.Json对象
❝有时在处理Http请求的时候,偷懒不想定义一个Model来处理,使用Dynamic来直接操作请求的数据是非常方便的
C#中dynamic关键字
❝dynamic关键字和动态语言运行时(DLR)是.Net 4.0中新增的功能。
什么是"动态"
-
编程语言有时可以划分为静态类型化语言和动态类型化语言。C#和Java经常被认为是静态化类型的语言,而Python、Ruby和JavaScript是动态类型语言。
-
一般而言,动态语言在编译时不会对类型进行检查,而是在运行时识别对象的类型。这种方法有利有弊:代码编写起来更快、更容易,但无法获取编译器错误,只能通过单元测试和其他方法来确保应用正常运行。
-
C#最初是作为纯静态语言创建的,但是C#4添加了一些动态元素,用于改进与动态语言和框架之间的互操作性。C# 团队考虑了多种设计选项,但最终确定添加一个新关键字来支持这些功能:dynamic。
-
dynamic关键字可充当C#类型系统中的静态类型声明。这样,C#就获得了动态功能,同时仍然作为静态类型化语言而存在。由于编译时不会去检查类型,所以导致IDE的IntellSense失效。
dynamic、object还是var?
那么,dynamic、Object和var之间的实际区别是什么?何时使用它们?
-
先说说var,经常有人会拿dynamic和var进行比较。实际上,var和dynamic完全是两个概念,根本不应该放在一起做比较。
-
var实际上编译器抛给我们的语法糖,一旦被编译,编译器就会自动匹配var变量的实际类型,并用实际类型来替换该变量的声明,等同于我们在编码时使用了实际类型声明。而dynamic被编译后是一个Object类型,编译器编译时不会对dynamic进行类型检查。
-
再说说Object,上面提到dynamic类型再编译后是一个Object类型,同样是Object类型,那么两者的区别是什么呢?
-
除了在编译时是否进行类型检查之外,另外一个重要的区别就是类型转化,这也是dynamic很有价值的地方,dynamic类型的实例和其他类型的实例间的转换是很简单的,开发人员能够很方便地在dyanmic和非dynamic行为间切换。任何实例都能隐式转换为dynamic类型实例,见下面的例子:
dynamic d1 = 7;
dynamic d2 = "a string";
dynamic d3 = System.DateTime.Today;
dynamic d4 = System.Diagnostics.Process.GetProcesses();
-
反之亦然,类型为dynamic的任何表达式也能够隐式转换为其他类型。
int i = d1;
string str = d2;
DateTime dt = d3;
System.Diagnostics.Process[] procs = d4;
前面整理过一篇关于dynamic类型与Newtonsoft.Json来操作请求的数据,请参考如下文章
C# Dynamic与Newtonsoft.Json的应用
参考Nettonsoft.Json中的访问,同样定义一个JTextAccessor,代码如下
❝dynamic是C#里面的动态类型,可在未知类型的情况访问对应的属性,非常灵活和方便。如果有已知强类型,如果有已知对应的强类型,可以直接转成对应的类型。但如果没有,要访问Json里面对应的数据的时候,就显得比较麻烦。再根据Asp.Net Core WebAPI中的FromBody传递内容就是一个JsonElement,我们可以借助DynamicObject来方便的访问对应的属性。
public class JTextAccessor : DynamicObject
{
private readonly JsonElement _content;
public JTextAccessor(JsonElement content)
{
_content = content;
}
public override bool TryGetMember(GetMemberBinder binder, out object? result)
{
result = null;
if (_content.TryGetProperty(binder.Name, out JsonElement value))
{
result = Obtain(value);
}
else return false;
return true;
}
private object? Obtain(in JsonElement element)
{
switch (element.ValueKind)
{
case JsonValueKind.String: return element.GetString();
case JsonValueKind.Null: return null;
case JsonValueKind.False: return false;
case JsonValueKind.True: return true;
case JsonValueKind.Number: return element.GetDouble();
default: break;
}
if (element.ValueKind == JsonValueKind.Array)
{
var list = new List<object>();
foreach (var item in element.EnumerateArray())
{
list.Add(Obtain(item));
}
return list;
}
// Undefine、Object
else return new JTextAccessor(element);
}
}
编写一个Controller来验证
[HttpPost]
public IActionResult Post([FromBody] dynamic value)
{
dynamic ja = new JTextAccessor(value);
string Name = ja.Name;
int Age = (int)ja.Age;
var list = ja.List;
string childName = list[0].Name;
string str = JsonSerializer.Serialize(value);
_logger.LogInformation(str);
return Ok(new
{
code = "0",
message = "成功",
reqCode = ""
});
}
设置好断点,调试
-
调试断点

-
使用postman做请求测试

-
查看调试的结果非常理想,成功偷懒省了事

一些推荐
-
【开源Blazor控件库】Ant Design Blazor、Bootstrap风格
-
【开源B/S项目】WTM
-
【开源WPF控件库】MaterialDesignInXAML、MaterialDesignExtensions、Panuon.UI.Silver、HandyControl、AduSkin-UI、ModernWpf
-
【开源WPF项目】Accelerider.Windows、TerminalMACS.ManagerForWPF
-
【开源Xamarin项目】全球优秀Xamarin.Forms项目收集
-
【开源Winform控件库】HZHControls、SunnyUI】
-
【开源Winform项目】SiMay远程控制管理系统
-
【开源Qt控件库】QWidgetDemo、Material风格的Qt控件
-
【开源Qt项目】开源Android实时投屏软件
-
【其他】大屏数据展示模板
❝时间如流水,只能流去不流回。
公众号:Dotnet9 作者:非法关键字 原文:【C# Dynamic与Newtonsoft.Json的应用、C# 通过Dynamic访问System.Text.Json对象】 编辑:沙漠之尽头的狼 日期:2020-12-02 ![]()
微信公众号:Dotnet9
本文分享自微信公众号 - Dotnet9(dotnet9_com)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
C#-将Newtonsoft.Json迁移到System.Text.Json
如何解决C#-将Newtonsoft.Json迁移到System.Text.Json?
我想从newtonsoft迁移到asp.net core 3.x的system.text.json默认值,但是我不知道如何转换我的设置/选项
这是我的设置:
IStartupFilter
我也遵循这个https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-migrate-from-newtonsoft-how-to
不幸的是,system.text.json没有services.AddControllers()
.AddFluentValidation()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
options.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});
并且不支持StringEnumConverter
,对此有什么解决方案吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
Delphi:访问JSON数组中的JSON对象
我有一个JSON对象,让我们将其命名为如下所示的jObject:
{
"id": 0,"data": "[{DAT_INCL: \"08/03/2012 10:07:08\",NUM_ORDE: 1,NUM_ATND: 1,NUM_ACAO: 2,NUM_RESU: 3},{DAT_INCL: \"08/03/2012 10:07:09\",NUM_ORDE: 2,NUM_ACAO: 4,NUM_RESU: 5},NUM_ORDE: 3,NUM_ACAO: 8,NUM_RESU: NULL}]"
}
如您所见,它包含两对,其中一个是具有三个对象的数组(在这种情况下,对象的数量是动态的),并且具有多个“键:值”(这些值没有变化,始终是相同的5个字段)
),我想将其插入到SQL数据库中,“键”为列,“值”为字段。问题是,如何分别访问每个对象?
在代码方面,我所做的是通过将包含此数组的对放入jPair中来提取它。
jPair := OriginalObject.Get(1);
然后捕获数组
jArray:= TJSONArray(jPair.JsonValue);
(此外,作为奖励,当我评估jArray.Size时,结果为6226004。是什么?)
关于System.Text.Json使用c#.net core 3.1访问json对象的Json对象和访问json对象内容的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于asp.net-mvc – Ajax.BeginForm,调用操作,返回JSON,如何在我的OnSuccess JS函数中访问JSON对象?、C# 通过Dynamic访问System.Text.Json对象、C#-将Newtonsoft.Json迁移到System.Text.Json、Delphi:访问JSON数组中的JSON对象等相关内容,可以在本站寻找。
本文标签: