我正在使用一个返回 JSON 的 API,其中它的值之一可以是 或false一个对象。为了解决这个问题,我创建了一个自定义JsonConverter<T>.
internal class JsonFalseOrObjectConverter<T> : JsonConverter<T> where T : class
{
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType == JsonTokenType.False)
{
return null;
}
else
{
return JsonSerializer.Deserialize<T>(ref reader);
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我收到以下编译器错误:
可能返回空引用。
我可以将返回类型设置为 aT?但随后我会收到错误:
返回类型中引用类型的可为空性与重写的成员不匹配。
我该如何解决这个问题?
我正在尝试在我的angular2项目中导入crypto-js.
我跟着几个SO问题和angular-cli指南,但最后我仍然有错误找不到模块'crypto-js'
我尝试了什么:
npm install crypto-js --save
和
typings install dt~crypto-js --global --save
然后我修改了文件angular-cli-build.js
var Angular2App = require('angular-cli/lib/broccoli/angular2-app');
module.exports = function(defaults) {
return new Angular2App(defaults, {
vendorNpmFiles: [
'systemjs/dist/system-polyfills.js',
'systemjs/dist/system.src.js',
'zone.js/dist/**/*.+(js|js.map)',
'es6-shim/es6-shim.js',
'reflect-metadata/**/*.+(ts|js|js.map)',
'rxjs/**/*.+(js|js.map)',
'@angular/**/*.+(js|js.map)',
'crypto-js/**/*.+(js|js.map)'
]
});
};
Run Code Online (Sandbox Code Playgroud)
和文件src/system-config.ts
const map: any = {
'crypto-js': 'vendor/crypto-js'
};
/** User packages configuration. */
const packages: any = {
'crypto-js': {
format: 'cjs'
}
};
Run Code Online (Sandbox Code Playgroud)
使用后
import * as CryptoJS from 'crypto-js';
我还有错误.我错过了什么 ?
谢谢
我创建了一个这样的Message类
import { ReflectiveInjector } from '@angular/core';
import { ApiService } from '../api.service';
export class Message {
timestamp: number;
message: any;
api: ApiService;
constructor(message: any) {
let injector = ReflectiveInjector.resolveAndCreate([ApiService]);
this.api = injector.get(ApiService);
this.timestamp = message.timestamp;
this.message = message.message;
}
}
Run Code Online (Sandbox Code Playgroud)
我不是直接在构造函数参数中注入ApiService,因为我试图避免这种情况:
let nm = new Message(message, this.api)
我不希望服务在参数中.
所以我使用的是ReflectiveInjector,但这段代码甚至不起作用.我收到此错误:EXCEPTION:错误:未捕获(在承诺中):没有Http的提供者!(ApiService - > Http)即使我以这种方式包含HTTP_PROVIDERS
import { bootstrap } from '@angular/platform-browser-dynamic';
import { enableProdMode } from '@angular/core';
import { HTTP_PROVIDERS } from '@angular/http';
import { AppComponent, environment …Run Code Online (Sandbox Code Playgroud) 已经有一个类似的问题,但我的问题是关于暴露给客户端的类。
public class MyClass : IAsyncDisposable {
public ValueTask DisposeAsync() => DoAsyncStuff();
}
Run Code Online (Sandbox Code Playgroud)
此类的处置是异步的,并且 的实现IDisposable会阻塞线程。
public void Dispose() => DisposeAsync().GetAwaiter().GetResult();
Run Code Online (Sandbox Code Playgroud)
如果IDisposable在类上实现并且用户处于同步上下文中,因此他们使用以下using语句:using (var c = new MyClass()) {},这会阻塞用户后面的线程,我认为这非常糟糕。相反,我宁愿不实现IDisposable并强制用户使用这种显式形式:
MyClass c;
try { c = new MyClass(); }
finally { c.DisposeAsync().GetAwaiter().GetResult(); }
Run Code Online (Sandbox Code Playgroud)
这更冗长,但至少用户不会有太大的惊喜。
我没有包含我的库的代码示例,因为这是一个普遍的问题。那么,当该Dispose方法在Task背后同步等待时,您对此有何看法?您是否遇到过问题?
angular ×2
c# ×2
.net ×1
.net-core ×1
c#-8.0 ×1
class ×1
cryptojs ×1
idisposable ×1
typescript ×1