DotNetJS类型系统揭秘:从基础到高级的序列化技巧

发布时间:2026/7/6 19:04:43

DotNetJS类型系统揭秘:从基础到高级的序列化技巧 DotNetJS类型系统揭秘从基础到高级的序列化技巧【免费下载链接】DotNetJSUse C# in web apps with comfort项目地址: https://gitcode.com/gh_mirrors/do/DotNetJSDotNetJS是一个让开发者能够在Web应用中舒适使用C#的强大工具其核心在于提供了C#与JavaScript之间的无缝互操作能力。而类型系统的序列化机制正是实现这一能力的关键所在它确保了不同类型的数据能够在两种语言之间高效、准确地传递。在DotNetJS中大部分简单类型在C#和JavaScript之间交互时会进行内存中的直接封送。例如数字、布尔值、字符串、数组列表以及它们的任务类型等。下面是一些原生支持的类型对应关系完整列表可参考.NET文档C#JavaScriptTask ofArray ofboolboolean✔️❌bytenumber✔️✔️charstring✔️❌stringstring✔️✔️intnumber✔️✔️longBigInt✔️❌floatNumber✔️❌DateTimeDate✔️❌当互操作API中指定了非原生支持类型的值时Bootsharp会使用自定义的高效二进制序列化格式对其进行序列化和反序列化。整个过程在C#和JavaScript两侧都封装在底层开发者无需为每个值手动编写生成器提示或指定[MarshallAs]属性。比如定义一个User记录public record User (long Id, string Name, DateTime Registered);然后在导出的API中使用它[Export] public static void AddUser (User user) { } [Export] public static event ActionUser? OnUserModified;Bootsharp会自动生成在两端对User记录进行序列化和反序列化所需的C#和JavaScript代码使得开发者可以像使用原生JavaScript API一样使用这些C# APIimport { Program } from bootsharp; Program.addUser({ id: 17, name: Carl, registered: Date.now() }); Program.onUserModified.subscribe(handleUserModified); function handleUserModified(user: Program.User) { }需要注意的是只有具有不可变语义的类型结构、记录和只读集合才会进行序列化其他类型被视为可变类型会作为互操作实例通过引用传递。枚举序列化技巧枚举为了获得更好的性能会被封送为数字同时在JavaScript端会额外生成名称与索引的映射以方便使用。定义一个枚举public enum Options { Foo, Bar }导出使用枚举的方法[Export] public static Options GetOption () Options.Bar;虽然GetOptions的返回值会以整数索引的形式传递给JavaScript但Bootsharp会在生成的代码中将枚举索引映射到字符串值反之亦然因此可以像下面这样正常使用import { Program } from bootsharp; const option Program.getOption(); console.log(option Program.Options.Foo); // false console.log(option Program.Options.Bar); // true console.log(Program.Options[Program.Options.Foo]); // Foo console.log(Program.Options[1]); // Bar字典序列化方法Bootsharp会将C#字典封送为ES6的Map。例如[Export] public static Dictionarystring, bool GetMap () new () { [foo] true, [bar] false };在JavaScript中可以使用标准的MapAPI来访问这个字典import { Program } from bootsharp; const map Program.getMap(); console.log(map.get(foo)); // true console.log(map.get(bar)); // false集合接口处理方式在编写C# API时使用各种集合接口如IReadOnlyList或IReadOnlyDictionary是很常见的。Bootsharp会接受互操作API中任何类型的数组或字典兼容接口并默认将它们封送为普通数组和映射。例如[Export] public static IReadOnlyDictionarystring, float Map ( IReadOnlyListstring a, IReadOnlyCollectionfloat b) { }在JavaScript中可以这样调用import { Program } from bootsharp; const map Program.map([foo, bar], [0, 7]); console.log(map.get(bar)); // 7通过掌握这些DotNetJS类型系统的序列化技巧开发者可以更加轻松地在Web应用中使用C#实现C#与JavaScript之间的数据无缝传递提升开发效率和应用性能。更多关于序列化的详细内容可以参考官方文档docs/guide/serialization.md。【免费下载链接】DotNetJSUse C# in web apps with comfort项目地址: https://gitcode.com/gh_mirrors/do/DotNetJS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻