JObject.ToObject() 扩展方法转换存储为字符串的日期时间值

2024-03-13

当使用字符串属性调用 JObject 上的 ToObject 时,会转换日期时间值。

class Program
{
    static void Main(string[] args)
    {
        var a = JObject.Parse("{\"aprop\":\"2012-12-02T23:03:31Z\"}");

        var jobject = a.ToObject<A>();
        Console.ReadKey();
    }
}

public class A
{
    public string AProp { get; set; }
}

问题是我的值被转换了,尽管它是一个字符串。 ISO8601 特定字符被跳过:

我预计不会发生任何转变,并希望能够自己进行日期验证和针对特定文化的创建。我还尝试了下一个代码但没有成功:

var jobject = a.ToObject<A>(new JsonSerializer
    {
        DateParseHandling = DateParseHandling.None
    });

The JObject.Parse是为了举例而介绍的。在我的实际任务中,我在控制器上有一个 Web.Api 操作:

public HttpResponseMessage Put(JObject[] requestData)
{  
    var jobject = a.ToObject<A>();
    return SomeCleverStaffResponse();
}

你想要的是

using Newtonsoft.Json;

class Program
{
    static void Main(string[] args)
    {
        var temp = JsonConvert.DeserializeObject<A>("{\"aprop\":\"2012-12-02T23:03:31Z\"}");
        Console.ReadKey();
    }
}

只要你这样做Parse因为“2012-12-02T23:03:31Z\”是一个日期,解析器创建一个日期对象,之后的所有内容都已经解析了该对象,因此.ToObject没有用,因为你正在做的事情是从日期到字符串,这就是你得到“12/...”的原因。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JObject.ToObject() 扩展方法转换存储为字符串的日期时间值 的相关文章

随机推荐