Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Newtonsoft JsonConvert can';不能正确地反序列化日期时间_C#_Json_Json.net - Fatal编程技术网

C#Newtonsoft JsonConvert can';不能正确地反序列化日期时间

C#Newtonsoft JsonConvert can';不能正确地反序列化日期时间,c#,json,json.net,C#,Json,Json.net,我们有一个MVC.Core项目,在该项目中,我们将日期时间值从字符串反序列化为日期时间属性时遇到问题 下面是一个例子: public class TestClass { public RecordStatus RecordStatus { get; set; } = RecordStatus.Active; [System.ComponentModel.Browsable(false)] public DateTime CreatedOn { get; private

我们有一个MVC.Core项目,在该项目中,我们将日期时间值从字符串反序列化为日期时间属性时遇到问题

下面是一个例子:

public class TestClass
{
    public RecordStatus RecordStatus { get; set; } = RecordStatus.Active;

    [System.ComponentModel.Browsable(false)]
    public DateTime CreatedOn { get; private set; }
}


    string s = @"{""recordStatus"":""Active"",""createdOn"":""2018-03-02T21:39:22.075Z""}";

    JsonSerializerSettings jsonSettings = new JsonSerializerSettings()
    {
        DateFormatString = "yyyy-MM-ddTHH:mm:ss.FFFZ",
        DateTimeZoneHandling = DateTimeZoneHandling.Utc,
        MissingMemberHandling = MissingMemberHandling.Ignore
    };

    TestClass psm = JsonConvert.DeserializeObject<TestClass>(s, jsonSettings);
我尝试了一系列不同的序列化程序设置值组合,但没有成功。我错过了什么?我知道我错过了一些明显的东西,但那是在那些日子里


谢谢

这里的问题不是格式字符串,这很好(正如我们在这里看到的):

收益率:

02-Mar-18 4:39:22 PM
问题实际上是
CreatedOn
上的私有setter。如果你删除所有的工作。事实上,它使用默认的序列化程序设置,因此不需要对该格式字符串执行任何操作


如果您打算为该字段设置一个私有setter,那么我建议您考虑让Json.NET使用私有setter。

这里的问题不是格式字符串,这很好(正如我们在这里看到的):

public class TestClass
{
    public RecordStatus RecordStatus { get; set; } = RecordStatus.Active;

    [System.ComponentModel.Browsable(false)]
    public DateTime CreatedOn { get; set; }
}
收益率:

02-Mar-18 4:39:22 PM
问题实际上是
CreatedOn
上的私有setter。如果你删除所有的工作。事实上,它使用默认的序列化程序设置,因此不需要对该格式字符串执行任何操作

如果您打算为该字段设置一个私有setter,那么我建议您考虑让Json.NET使用私有setter

public class TestClass
{
    public RecordStatus RecordStatus { get; set; } = RecordStatus.Active;

    [System.ComponentModel.Browsable(false)]
    public DateTime CreatedOn { get; set; }
}
CreatedOn
属性的setter中删除
private
访问修饰符


CreatedOn
属性的setter中删除
private
access修饰符

日期和时间之间的T有什么关系?能否尝试使用“MM/dd/yyyyy HH:MM:ss”格式的日期?作为输入的日期时间的字符串格式不会更改。datetime是ISO格式。“T”是表示形式的时间组件之前的时间指示符。使用[JsonProperty]属性标记CreatedOn属性。日期和时间之间的T有什么关系?能否尝试使用“MM/dd/yyyy HH:MM:ss”中的以下格式的日期?作为输入获取的日期时间的字符串格式不会更改。datetime是ISO格式。“T”是表示的时间组件之前的时间指示符。使用[JsonProperty]属性标记CreatedOn属性。啊,是的,这很可能是问题所在。。。让我检查一下。啊,是的,这很可能是问题所在。。。让我查一下,你先回答。我将把这个标记为答案。告诉过你这是个简单的问题。。。。这是在几天的会议后,试图回到实际工作中发生的事情。@Monkey扳手事实上,皮特先回答。你先回答。我将把这个标记为答案。告诉过你这是个简单的问题。。。。这就是在几天的会议后,试图回到实际工作中所发生的事情。@Monkey扳手实际上,皮特首先回答。