C# 和 typescript 之间 JSON 的端到端类型安全

Posted

技术标签:

【中文标题】C# 和 typescript 之间 JSON 的端到端类型安全【英文标题】:End to end type safety of JSON between C# and typescript 【发布时间】:2016-07-09 07:56:46 【问题描述】:

Typescript 和 C# 都支持对“编译”类型检查的对象成员的类型安全访问,而 json 用于在 Web 应用程序后端和它们的前端之间传输“数据传输对象”。

我希望这里的工具可以从定义 JSON 消息的 C# 类生成打字稿“包装器类”——但我从未听说过使用这种工具。 可能是因为我不是一个活跃的 TypeScript 开发人员,所以我错过了 TypeScript 工具集中的一些东西,或者 .net 的“标准”JSON 工具包之一已经做到了。或者我可能只是在问一个非常愚蠢的问题……..

【问题讨论】:

【参考方案1】:

TypeLITE 会将 C# 类转换为 TypeScript 接口:

public class Address 
    public string Street  get; set; 


public class Person 
    public string Name  get; set; 
    public List<address> Addresses  get; set; 

变成:

interface Address 
    Street: string;


interface Person 
    Name: string;
    Addresses: Address[];

这将使您的 TypeScript 在使用 C# API 时保持诚实。

【讨论】:

谢谢,您知道一种生成 TypeScript“端点”的方法吗?它完全定义了 C# 应对公开的“JSON API”? (以及一个很好的开发/构建“管道”来使用它。) 我对此有疑问。一旦那个打字稿被编译成 javascript,你怎么能强制它是安全的?我正在编写一个 Angular2 应用程序,并且能够让 C# api 以与我在 Typescript 中使用的接口不同的形式返回数据,并且我没有收到任何类型的错误 @AlexKibler - TypeScript 提供编译时检查,而不是运行时检查(尽管有添加运行时检查的衍生工具,例如 TS*:stevefenton.co.uk/2014/07/…) @IanRingrose 我没有完整的故事给你 - 有很多选择,这取决于你目前的工作流程。从那里大量的任务运行者来看,几乎所有人都可以自动执行此操作。【参考方案2】:

Reinforced.Typing 看起来像是一个选项,它似乎生成 TypeScript 代码来调用 web 服务以及接口/对象来描述返回的数据。

简单地说,这个东西将你的 .NET 程序集转换为 TypeScript 代码。 它集成到 VisualStudio 构建过程中。

我认为它的使用比 TypeLITE 少,两者都是开源的,因此可以扩展以满足给定项目的需求。

【讨论】:

【参考方案3】:

查看Reinforced.Typings,尤其是this sample。那里展示了如何将您的 MVC 应用程序控制器转换为 AngularJS 服务,返回您的模型的 ng.IPromise&lt;&gt;,并确保构建时的类型安全。

【讨论】:

以上是关于C# 和 typescript 之间 JSON 的端到端类型安全的主要内容,如果未能解决你的问题,请参考以下文章

1.初步认识TypeScript

快速将C#类型转成TypeScript介面定义

为啥 TypeScript 编译器会忽略 tsconfig.json?

C#中Object和Json之间的转换

C#中Object和Json之间的转换

C# .net中json字符串和对象之间的转化方法