当前位置: 首页 > 编程语言 > C#

使用每种类型的不同格式在同一类中序列化多个DateTime属性分享

时间:2023-04-10 20:38:12 C#

C#学习教程:在同一个类中为每种类型使用不同格式序列化多个DateTime属性我需要用不同的格式序列化每个属性。我应该怎么办?我试过:JsonConvert.SerializeObject(obj,Formatting.None,newIsoDateTimeConverter{DateTimeFormat="MM.dd.yyyy"});此解决方案对我不起作用,因为它将日期格式应用于所有属性。有没有办法用不同的格式序列化每个DateTime属性?也许有一些属性?NewtonSoft.Json的结构有点难以理解,您可以使用如下所示的自定义转换器来执行您想要的操作:[TestMethod]publicvoidConversion(){varobj=newDualDate(){DateOne=newDateTime(2013,07,25),DateTwo=newDateTime(2013,07,25)};Assert.AreEqual("{"DateOne":"07.25.2013","DateTwo":"2013-07-25T00:00:00"}",JsonConvert.SerializeObject(obj,Formatting.None,newDualDateJsonConverter()));}classDualDate{publicDateTimeDateOne{get;放;}publicDateTimeDateTwo{得到;放;}}classDualDateJsonConverter:JsonConverter{publicoverridevoidWriteJson(JsonWriterwriter,objectvalue,JsonSerializerserializer){JObjectresult=newJObject();DualDatedd=(DualDate)值;result.Add("DateOne",JToken.FromObject(dd.DateOne.ToString("MM.dd.yyyy")));result.Add("DateTwo",JToken.FromObject(dd.DateTwo));结果.WriteTo(作家);}//其他JsonConverterMethodspublicoverrideboolCanConvert(TypeobjectType){returnobjectType==typeof(双日期);}publicoverrideboolCanWrite{get{returntrue;}}publicoverrideboolCanRead{get{returnfalse;}}publicoverrideobjectReadJson(JsonReaderreader,TypeobjectType,objectexistingValue,JsonSerializernewserializer){thirowerNotImplementedException();处理这种情况的一种简单方法是继承IsoDateTimeConverterIsoDateTimeConverter为您需要的每种不同日期格式创建自定义日期转换器例如:classMonthDayYearDateConverter:IsoDateTimeConverter{publicMonthDayYearDateConverter(){DateTimeFormat="MM.dd.yyyy";}}classLongDateConverter:IsoDateTimeConverter{publicLongDateConverter(){DateTimeFormat="MMMMdd,yyyy";然后你可以使用[JsonConverter]属性来修饰任何需要自定义格式的类中的各个DateTime属性:放;}[JsonConverter(typeof(LongDateConverter))]publicDateTimeDate2{get;放;}//使用默认格式publicDateTimeDate3{get;放;}}演示:Foofoo=newFoo{Date1=DateTime.Now,Date2=DateTime.Now,Date3=DateTime.Now};字符串json=JsonConvert.SerializeObject(foo,Formatting.Indented);控制台.WriteLine(json);输出:{"Date1":"03.03.2014","Date2":"March03,2014","Date3":"2014-03-03T10:25:49.8885852-06:00"}你可以创建一个inheritanceIsoDateTimeConverter和在构造函数上为格式传递自定义日期类。在属性上,您可以指定每个属性对应的格式。请参见下面的代码:publicclassLoginResponse{[JsonProperty("access_token")]publicstringAccessToken{get;放;}[JsonProperty("token_type")]publicstringTokenType{get;放;}[JsonProperty("expires_in")]publicDateTimeExpiresIn{get;放;}[JsonProperty("userName")]publicstring用户名{get;放;}[JsonConverter(typeof(CustomDateFormat),"EEE,ddMMMyyyyHH:mm:sszzz")][JsonProperty(".issued")]publicDateTimeIssued{get;放;}[JsonConverter(typeof(CustomDateFormat),"MMMMdd,yyyy")][JsonProperty(".expires")]publicDateTimeExpires{get;放;}}publicclassCustomDateFormat:IsoDateTimeConverter{publicCustomDateFormat(stringformat){DateTimeFormat=format;我意识到这是一个老问题,但我在搜索同样的问题时偶然发现了它。Newtonsoft现在在您可以使用的JsonSerializerSettings类中有一个DateFormatString属性。我来到这个问题寻找答案并刚刚找到属性,我按如下方式使用它并且它是这样工作的:privateconststring_StrDateFormat="yyyy-MM-ddHH:mm:ss";privatestaticstringGetJSON(objectvalue){returnJsonConvert.SerializeObject(value,newJsonSerializerSettings{DateFormatString=_StrDateFormat});当value有一个DateTime对象时,它会将其转换为符合_StrDateFormat字符串的字符串。也许这个官方链接可以更新?问候。以上就是C#学习教程:使用每种类型不同的格式序列化同一个类中多个DateTime属性共享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多加关注——本文整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: