c# - 带有命名元组的 JavaScriptSerializer
问题描述
如果我将JavaScriptSerializer与命名元组一起使用,我会得到以下信息:
var serialized = new JavaScriptSerializer().Serialize((Foo: "Fooo", Bar: "Bar"));
序列化为:
{"Item1":"F","Item2":"B"}
任何获得的选项:
{"Foo":"F","Bar":"B"}
无需编写具有属性 Foo 和 Bar 而不是元组的自定义类?
解决方案
你试过匿名课吗?
var serialized = new JavaScriptSerializer().SerializeObject(new {Foo= "Fooo", Bar= "Bar"});
它不适用于元组,因为:
public void M() {
var t = (Foo:"fooo",Bar:"Baar");
}
在 IL 中替换为:
.method public hidebysig
instance void M () cil managed
{
// Method begins at RVA 0x2050
// Code size 19 (0x13)
.maxstack 3
.locals init (
[0] valuetype [mscorlib]System.ValueTuple`2<string, string>
)
IL_0000: nop
IL_0001: ldloca.s 0
IL_0003: ldstr "fooo"
IL_0008: ldstr "Baar"
IL_000d: call instance void valuetype [mscorlib]System.ValueTuple`2<string, string>::.ctor(!0, !1)
IL_0012: ret
} // end of method C::M
如您所见,字段的名称已从 IL 中消失,并且无法以任何方式检索(它只是语法糖)
推荐阅读
- jquery - Laravel 控制器未从 ajax 调用执行
- ibm-cloud - 我们如何使用 LogDNA 将 IBM Cloud“SDK for NodeJS”日志发送到 Activity Tracker?
- mongodb - 对整个集合进行排序,然后保存在猫鼬中
- mysql - 使用mysql在特定字符后删除部分字符串
- angular - 子项目与模块角度 7
- javascript - 使用 ExpressJS 处理飞行前请求
- automation - 当 UUID 存在时,未知设备或模拟器发生未知服务器端错误
- debian - Apache 加载一个虚拟主机,其他虚拟主机加载成功
- java - 验证签名的 JWT
- python-3.7 - ValueError: int() 以 10 为底的无效文字:'\x00\x00\