相关疑难解决方法(0)

"正确"的JSON日期格式

我已经看到了许多不同的JSON日期格式标准:

"\"\\/Date(1335205592410)\\/\""         .NET JavaScriptSerializer
"\"\\/Date(1335205592410-0500)\\/\""    .NET DataContractJsonSerializer
"2012-04-23T18:25:43.511Z"              JavaScript built-in JSON object
"2012-04-21T18:25:43-05:00"             ISO 8601
Run Code Online (Sandbox Code Playgroud)

哪一个是正确的?还是最好的?这有什么标准吗?

javascript json

1071
推荐指数
9
解决办法
97万
查看次数

使用Json.Net进行序列化时指定自定义DateTime格式

我正在开发一个API来使用ASP.NET Web API公开一些数据.

在其中一个API中,客户希望我们以yyyy-MM-dd格式显示日期.我不想更改全局设置(例如GlobalConfiguration.Configuration.Formatters.JsonFormatter),因为它非常特定于此客户端.我在多个客户的解决方案中进行开发.

我能想到的解决方案之一是创建一个自定义JsonConverter,然后将其放入我需要进行自定义格式化的属性

例如

class ReturnObjectA 
{
    [JsonConverter(typeof(CustomDateTimeConverter))]
    public DateTime ReturnDate { get;set;}
}
Run Code Online (Sandbox Code Playgroud)

只是想知道是否还有其他一些简单的方法.

c# datetime json.net asp.net-web-api

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

如何从ISO 8601格式创建.NET DateTime

我已经找到了如何将DateTime转换为ISO 8601格式,但没有提到如何在C#中进行反向操作.

我有2010-08-20T15:00:00Z,我想把它变成一个DateTime对象.

我可以自己分离字符串的各个部分,但对于已经是国际标准的东西来说,这似乎很多.

.net c# datetime iso8601 datetime-parsing

115
推荐指数
6
解决办法
10万
查看次数

如何传递datetime参数?

如何将UTC日期传递给Web API?

传递2010-01-01工作正常,但是当我传递UTC日期(例如2014-12-31T22:00:00.000Z时间组件)时,我得到HTTP 404响应.所以

http://domain/api/controller/action/2012-12-31T22:00:00.000Z
Run Code Online (Sandbox Code Playgroud)

产生404错误响应,而

http://domain/api/controller/action/2012-12-31
Run Code Online (Sandbox Code Playgroud)

工作良好.

那么如何将UTC日期传递给Web API - 或者至少指定日期时间?

asp.net datetime asp.net-web-api

72
推荐指数
6
解决办法
12万
查看次数

System.Text.Json - 将嵌套对象反序列化为字符串

我正在尝试使用System.Text.Json.JsonSerializer来部分反序列化模型,因此其中一个属性被读取为包含原始 JSON 的字符串。

public class SomeModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Info { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

示例代码

var json = @"{
                 ""Id"": 1,
                 ""Name"": ""Some Name"",
                 ""Info"": {
                     ""Additional"": ""Fields"",
                     ""Are"": ""Inside""
                 }
             }";

var model = JsonSerializer.Deserialize<SomeModel>(json);
Run Code Online (Sandbox Code Playgroud)

应该生成模型,该Info属性包含来自原始 JSON 的 Info 对象作为字符串:

{
    "Additional": "Fields",
    "Are": "Inside"
}
Run Code Online (Sandbox Code Playgroud)

它不能开箱即用并引发异常:

System.Text.Json.JsonException: ---> System.InvalidOperationException: 无法以字符串形式获取标记类型“StartObject”的值。

到目前为止我尝试了什么:

public class InfoToStringConverter : JsonConverter<string>
{
    public override …
Run Code Online (Sandbox Code Playgroud)

c# json deserialization .net-core system.text.json

9
推荐指数
2
解决办法
9802
查看次数

.Net Core 3.0 System.Text.Json 以最小日期时间和 UTC 偏移量失败

我一直在从 2.2 迁移到 3.0,到目前为止一切都非常顺利,但是当用新的 System.Text.Json 替换 Newtonsoft 时,我遇到了以下问题。

尝试使用 UTC 偏移量反序列化 DateTime 最小值时,会引发以下异常

未处理的异常。System.Text.Json.JsonException:无法将 JSON 值转换为 System.DateTime。路径:$.DateCreated | 行号:2 | 字节位置内联:43

例子:

using System;
using Newtonsoft.Json;      

class Program
{
    static void Main(string[] args)
    {
        var json = "{\"MyDateTime\": \"0001-01-01T00:00:00+01:00\"}";
                
        var newtonDeserialized = JsonConvert.DeserializeObject<Class>(json);

        //Bad things happen here.
        var systemDeserialized =  System.Text.Json.JsonSerializer.Deserialize<Class>(json);
        
        Console.WriteLine(newtonDeserialized.MyDateTime);
        Console.WriteLine(systemDeserialized.MyDateTime);
    }
}

class Class
{
    public DateTime MyDateTime {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

在线示例可以在这里找到Fiddle

我想我可以编写自己的 DateTime 序列化程序,但必须有一种更简单/更简洁的方法来完成 Newtonsoft 所做的工作而无需任何配置。

这发生在3.0.1003.1.500并且5.0.100

c# datetime json .net-core-3.0 system.text.json

7
推荐指数
0
解决办法
2008
查看次数