Json   发布时间:2022-04-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Newtonsoft.Json中的时间格式详解.大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

Newtonsoft.json是一款不错的序列化反序列化第三方组件,具体如何使用属于基础知识,此处不再讲解.看以下代码:

public class OutgameEntity
{
    String orderid{get;set;}
    public datetiR_341_11845@e? payTime { get; set; }
}

很简单的一个实体类

假如此时有一个url:http://www.xxx.xx/do.svc/xxx?data=,我们如果要把OutgameEntity实体类的值传过去,就需要反序列化对象为String字符串.

static String Jsonserialize(T o)
{
   String str = JsonConvert.serializeObject(o,Newtonsoft.Json.FormatTing.Indented,new JsonserializerSetTings
   {
        NullValueHandling = NullValueHandling.Ignore
   });
   return str;
}
 
new WebClient().DownloadString(url,Jsonserialize(OutgameEntity));
此段代码看似没有任何问题.不过当你接收时,你会发现一点点问题.
"payTime":"\/Date(13884569650000800)\/".
如果这个参数值没有任何意义,那么我们可以忽略这个问题.但是作为程序员,特别是和别的公司进行对接的接口会出现这样的参数值,会给同行造成此人是菜鸟的心理.所以我们应该想办法解决这个不大不小的问题.
如何解决呢?
请看以下这个接口:
using Newtonsoft.Json.scheR_341_11845@a;
using System;

namespace Newtonsoft.Json
{
    abstract class JsonConverter
    {
        protected JsonConverter();

        virtual bool CanRead { get; }
        bool CanWrite { get; }

        bool CanConvert(Type objectTypE);
        virtual JsonscheR_341_11845@a GetscheR_341_11845@a();
        object ReadJson(JsonReader reader,Type objectType,255)">object exisTingValue,Jsonserializer serializer);
        void WriteJson(JsonWriter writer,255)">object value,Jsonserializer serializer);
    }
}
using Newtonsoft.Json;
namespace Newtonsoft.Json.Converters
{
    class datetiR_341_11845@eConverterBase : JsonConverter
    {
        protected datetiR_341_11845@eConverterBase();

        override bool CanConvert(Type objectTypE);
    }
}

已经有了datetiR_341_11845@eConverterBse这个父类,那么要实现这个功能就比较好办.

我们去重写实现JsonConverter中的ReadJson和WriteJson方法,如下:

class UnixdatetiR_341_11845@eConverter : datetiR_341_11845@eConverterBase
{
    :rgb(0,Jsonserializer serializer)
    {
        if (reader.TokenType != JsonToken.Integer)
        {
            throw new Exception(String.Format("日期格式错误,got {0}.",reader.TokenTypE));
        }
        var ticks = (long)reader.Value;
        var date = new datetiR_341_11845@e(1970,1,1);
        date = date.AddSeconds(ticks);
        return date;
    }
    long ticks;
        if (value is datetiR_341_11845@E)
        {
            var epoc = :rgb(0,1);
            var delta = ((datetiR_341_11845@E)value) - epoc;
            if (delta.@R_239_10586@lSeconds < 0)
            {
                new ArgumentOutOfRangeException("时间格式错误.1");
            }
            ticks = (long)delta.@R_239_10586@lSeconds;
        }
        else
        {
            new Exception("时间格式错误.2");
        }
        writer.WriteValue(ticks);
    }
}

请注意JsonConverter类中有一个方法叫CanConvert(Type t),那由此我们是否可以用这样的方式来实现呢?如代码所示:

class ModelEntity
{
    String value { get; set; }

    [JsonConverter(typeof(UnixdatetiR_341_11845@eConverter))]
    public datetiR_341_11845@e createtime { get; set; }
}
OK,debug走起,
private void button1_Click(object sender,EventArgs E)
{
    var model = new ModelEntity();
    model.birthdate = datetiR_341_11845@e.Now;
    model.value = "Find a Way";
    var str = Common.serializerHelper<ModelEntity>.Jsonserialize(model);
 }

那我修改实体,如下:

再去反序列化呢?

时间戳,高大尚,妈妈再也不用担心我写代码.

上面的一大堆,简单的实现的话就下面的一段就可以了:

用@H_627_197@Newtonsoft.Json转换json,可是如果数据库是日期类型转换出来之后变成了"\/Date(1269582661683+0800)\/"这样的格式

  

   下面是解决方案:

List<UserInfo> listuser = UserInfoManage.GetUserInfoBysql("SELEct Top 5 * From Userinfo");
IsodatetiR_341_11845@eConverter timeConverter = new IsodatetiR_341_11845@eConverter();
//这里使用自定义日期格式,如果不使用的话,认是ISO8601格式
timeConverter.datetiR_341_11845@eFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss";
//listuser是准备转换的对象
String ResJsonStr = JsonConvert.serializeObject(listuser,FormatTing.Indented,timeConverter);
return ResJsonStr;

[{ "Id": 6,"UserId": "food6","UserPwd": "f0000","State": true,"RegTime": "2009-10-16 16:59:59","ComeInt": 1,"RegAdmin": "1","IsVip": 0,"IsPhoneSALE": 0,"IsA": 0,"IsB": 0,"A": "","B": "","C": "" }]

大佬总结

以上是大佬教程为你收集整理的Newtonsoft.Json中的时间格式详解.全部内容,希望文章能够帮你解决Newtonsoft.Json中的时间格式详解.所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。