小编Pan*_*vos的帖子

将 JSON 从对象序列化为字符串/DateOnly

我有一个来自对象的 JSON 调用:

 public record SaveDate(DateOnly StartDate, string EndDate, Object[] objects);
Run Code Online (Sandbox Code Playgroud)
var saveDate= new SaveDate(DateOnly.MinValue, DateTime.MaxValue.ToString("yyyy-MM-dd"), 
new Object[] { objects});
Run Code Online (Sandbox Code Playgroud)

当执行 API 调用时,它最终返回

{
    "startDate": {
        "year": 1,
        "month": 1,
        "day": 1,
        "dayOfWeek": 1,
        "dayOfYear": 1,
        "dayNumber": 0
    },
    "endDate": "2022-07-07",
    "Object": [
        {
            "foo": "bar"
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

但是我需要从 startDate 发送的格式与 endDate (“yyyy-MM-dd”)相同,而不是反序列化版本。我怎样才能做到这一点?

注意:我使用 DateOnly 作为类型 (.net 6.0),并且 API 需要采用上面指定的格式的字符串。

c# json json.net .net-6.0

14
推荐指数
2
解决办法
2万
查看次数

获取两个给定日期之间的所有月份名称

我正在尝试创建一个函数,它在c#中的两个日期之间给出所有月份名称

List<string> liMonths = MyFunction(date1,date2);
Run Code Online (Sandbox Code Playgroud)

我的功能是

MyFunction(DateTime date1,DateTime date2)
{

//some code
return listOfMonths;
}
Run Code Online (Sandbox Code Playgroud)

你能帮帮我怎么办?

c#

13
推荐指数
3
解决办法
1万
查看次数

在服务提供程序上调用了“AddEntityFramework*”,但在 DbContext 选项配置中未调用“UseInternalServiceProvider”

我正在将 ASP.NET Core 应用程序从 Framework 2.2 升级到 3.1。它还使用实体框架核心。

在 Startup.ConfigureServices 方法中,有这样一段代码:

services.AddEntityFrameworkNpgsql()
    .AddDbContext<MainDbContext>(options => options
        .UseNpgsql(Configuration.GetConnectionString("MainDbContext")));
Run Code Online (Sandbox Code Playgroud)

.NET Core 2.2 一切正常。使用 .NET Core 3.1,我在每次应用程序启动时都会收到此警告:

在服务提供程序上调用了“AddEntityFramework*”,但在 DbContext 选项配置中未调用“UseInternalServiceProvider”。删除“AddEntityFramework*”调用,因为在大多数情况下它是不需要的,并且可能会导致与在同一服务提供商中注册的其他产品和服务发生冲突。

查找UseInternalServiceProvider方法,看起来应该在上调options用以传递主要服务提供者。不幸的是,此时服务提供者还不存在。它即将建成。

我不明白问题是什么以及这个警告想告诉我什么,但没能做到。我怎样才能让那个警告消失?网络还不知道这条消息。

c# npgsql entity-framework-core .net-core asp.net-core

13
推荐指数
1
解决办法
4313
查看次数

结合返回和切换

我该如何结合returnswitch case陈述?

我想要类似的东西

return switch(a)
       {
          case 1:"lalala"
          case 2:"blalbla"
          case 3:"lolollo"
          default:"default" 
       };
Run Code Online (Sandbox Code Playgroud)

我知道这个解决方案

switch(a)
{
    case 1: return "lalala";
    case 2: return "blalbla";
    case 3: return "lolollo";
    default: return "default";
}
Run Code Online (Sandbox Code Playgroud)

但我想只使用return运营商.

c# switch-statement switch-expression

12
推荐指数
7
解决办法
5万
查看次数

DbFunctions.TruncateTime LINQ等效于ASP .NET CORE

我的.net应用程序中有以下功能LINQ

    public ActionResult Index()
    {
        Dictionary<DateTime?, List<Event>> result;
        result = (from events in db.Events.Include("Activity")
                      where events.IsActive
                      group events by DbFunctions.TruncateTime(events.DateTimeFrom) into dateGroup
                      select new { EventDate = dateGroup.Key, Events = dateGroup.ToList() }).ToDictionary(x => x.EventDate, x => x.Events);

        return View(result);
    }
Run Code Online (Sandbox Code Playgroud)

当我在ASP .NET CORE中使用它时,我不能使用DbFunctions.我如何重写它以使其在Microsoft.EntityFrameworkCore中工作?我正在使用SQLite,如果这有所作为.

linq sqlite entity-framework-core

12
推荐指数
3
解决办法
9621
查看次数

迁移到 NET6

我尝试将我的 ASP CORE 项目迁移到 NET6 我的项目使用下一个包

IdentityServer4.AccessTokenValidation - 3.0.1

IdentityModel.AspNetCore.OAuth2Introspection - 4.0.1

身份模型 - 5.2.0

项目构建成功。但是当我运行应用程序时出现错误

MissingMethodException: Method not found: 'IdentityModel.Client.DiscoveryEndpoint IdentityModel.Client.DiscoveryEndpoint.ParseUrl(System.String)'.
IdentityServer4.AccessTokenValidation.IdentityServerAuthenticationOptions.ConfigureJwtBearer(JwtBearerOptions jwtOptions)
IdentityServer4.AccessTokenValidation.ConfigureInternalOptions.Configure(string name, JwtBearerOptions options)
Microsoft.Extensions.Options.OptionsFactory<TOptions>.Create(string name)
Microsoft.Extensions.Options.OptionsMonitor<TOptions>+<>c__DisplayClass10_0.<Get>b__0()
Run Code Online (Sandbox Code Playgroud)

有人遇到过这个问题吗?

identityserver4 .net-6.0

12
推荐指数
2
解决办法
1万
查看次数

使用nuget包部署单个文件

我想用一个文件创建一个nuget包.有没有办法打包单个文件,然后指示文件在Visual Studio项目中的位置?

我能够创建一个nuspec文件并打包一个包含相关文件的nuget包.但是,不能将其安装在包装内.

更具体地说:我有一个配置文件,在许多项目中应该是相同的.我希望能够安装一个nuget包,可以安装它们以将配置文件放在正确的位置.

nuspec文件现在只是指定元数据的基础知识.然后我使用该nuspec文件和目录中的配置文件运行nuget pack.这会导致nuget包中包含配置文件,该文件是可卸载的.

这是我现在在nuget包中的内容:

在此输入图像描述

和nuspec文件:

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    <id>StyleCopSettings</id>
    <version>1.0.1</version>
    <title>StyleCopSettings</title>
    <authors>Clearspan</authors>
    <owners>Clearspan</owners>
    <description>StyleCopSettings</description>
  </metadata>
</package>
Run Code Online (Sandbox Code Playgroud)

.net visual-studio nuget

11
推荐指数
1
解决办法
1463
查看次数

当url包含土耳其字符时,为什么Uri.TryCreate会抛出NRE?

我遇到了一个有趣的情况,我NREUri.TryCreate方法中得到它应该返回false.

您可以重现以下问题:

Uri url;
if (Uri.TryCreate("http:Ç", UriKind.RelativeOrAbsolute, out url))
{
    Console.WriteLine("success");
}
Run Code Online (Sandbox Code Playgroud)

我猜它在解析期间失败了,但是当我尝试"http:A"例子时,它返回true并将其解析为相对url.即使解析失败也应该false按照我的理解返回,这可能是什么问题?这似乎是实现中的错误原因文档没有提到有关此方法的任何异常.

该错误发生在.NET 4.6.1中,但不是4.0

.net c# .net-4.0 .net-core .net-4.6.1

11
推荐指数
1
解决办法
360
查看次数

异步流与反应式扩展相比如何?

如何比较以下两个?Rx 更强大吗?

反应式扩展:

var observable = Observable.Create<char>(async (observer, cancel) =>
{
    while (true)
    {
        string line = await sr.ReadLineAsync();
        if (line == null)
            break;
        observer.OnNext(line);
    }
});

observable.Subscribe(
    c => Console.WriteLine(c.ToString()),
    () => end.Dispose());
Run Code Online (Sandbox Code Playgroud)

异步流:

public async void Run(string path)
{
    await foreach (var line in TestAsync())
    {
        Console.WriteLine(line);
    }
}

private async IAsyncEnumerable<string> TestAsync()
{
    while (true)
    {
        string line = await sr.ReadLineAsync();
        if (line == null)
            break;
        yield return line;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# system.reactive c#-8.0 iasyncenumerable

10
推荐指数
1
解决办法
2871
查看次数

如何调用默认方法而不是具体实现

为什么默认接口方法的行为在 C# 8 中发生了变化?过去的以下代码(当默认接口方法未发布时):

interface IDefaultInterfaceMethod
{
    // By default, this method will be virtual, and the virtual keyword can be here used!
    virtual void DefaultMethod()
    {
        Console.WriteLine("I am a default method in the interface!");
    }

}

interface IOverrideDefaultInterfaceMethod : IDefaultInterfaceMethod
{
    void IDefaultInterfaceMethod.DefaultMethod()
    {
        Console.WriteLine("I am an overridden default method!");
    }
}

class AnyClass : IDefaultInterfaceMethod, IOverrideDefaultInterfaceMethod
{
}

class Program
{
    static void Main()
    {
        IDefaultInterfaceMethod anyClass = new AnyClass();
        anyClass.DefaultMethod();

        IOverrideDefaultInterfaceMethod anyClassOverridden = new AnyClass();
        anyClassOverridden.DefaultMethod();
    } …
Run Code Online (Sandbox Code Playgroud)

c# c#-8.0 default-interface-member

10
推荐指数
1
解决办法
891
查看次数