@@ -44,19 +44,19 @@ public PropertyContractResolver(bool camelCase, FormatScope scope)
4444 protected override JsonProperty CreateProperty ( MemberInfo member , MemberSerialization memberSerialization )
4545 {
4646 var property = base . CreateProperty ( member , memberSerialization ) ;
47- var descriptor = PropertyDescriptor . GetDescriptor ( this . formatScope , member ) ;
48-
49- property . PropertyName = descriptor . Name ;
47+ var descriptor = new PropertyDescriptor ( this . formatScope , member ) ;
48+
49+ property . PropertyName = descriptor . AliasName ;
5050 property . Ignored = descriptor . IgnoreSerialized ;
5151
5252 if ( this . useCamelCase == true )
5353 {
5454 property . PropertyName = FormatOptions . CamelCase ( property . PropertyName ) ;
5555 }
5656
57- if ( property . Converter == null )
57+ if ( property . Converter == null && descriptor . DateTimeFormat != null )
5858 {
59- property . Converter = descriptor . DateTimeConverter ;
59+ property . Converter = new IsoDateTimeConverter { DateTimeFormat = descriptor . DateTimeFormat } ;
6060 }
6161
6262 if ( descriptor . IgnoreWhenNull == true )
@@ -75,12 +75,12 @@ private class PropertyDescriptor
7575 /// <summary>
7676 /// 获取属性别名或名称
7777 /// </summary>
78- public string Name { get ; private set ; }
78+ public string AliasName { get ; private set ; }
7979
8080 /// <summary>
81- /// 获取时间转换器
81+ /// 获取日期时间格式
8282 /// </summary>
83- public JsonConverter DateTimeConverter { get ; private set ; }
83+ public string DateTimeFormat { get ; private set ; }
8484
8585 /// <summary>
8686 /// 获取是否忽略序列化
@@ -95,110 +95,28 @@ private class PropertyDescriptor
9595 /// <summary>
9696 /// 属性的描述
9797 /// </summary>
98- /// <param name="scopeMember"></param>
99- private PropertyDescriptor ( ScopeMember scopeMember )
98+ /// <param name="scope"></param>
99+ /// <param name="member"></param>
100+ public PropertyDescriptor ( FormatScope scope , MemberInfo member )
100101 {
101- var member = scopeMember . MemberInfo ;
102- var formatScope = scopeMember . FormatScope ;
103-
104102 var aliasAsAttribute = member . GetAttribute < AliasAsAttribute > ( true ) ;
105- if ( aliasAsAttribute != null && aliasAsAttribute . IsDefinedScope ( formatScope ) )
103+ if ( aliasAsAttribute != null && aliasAsAttribute . IsDefinedScope ( scope ) )
106104 {
107- this . Name = aliasAsAttribute . Name ;
105+ this . AliasName = aliasAsAttribute . Name ;
108106 }
109107 else
110108 {
111- this . Name = member . Name ;
109+ this . AliasName = member . Name ;
112110 }
113111
114112 var datetimeFormatAttribute = member . GetAttribute < DateTimeFormatAttribute > ( true ) ;
115- if ( datetimeFormatAttribute != null && datetimeFormatAttribute . IsDefinedScope ( formatScope ) )
113+ if ( datetimeFormatAttribute != null && datetimeFormatAttribute . IsDefinedScope ( scope ) )
116114 {
117- this . DateTimeConverter = new IsoDateTimeConverter { DateTimeFormat = datetimeFormatAttribute . Format } ;
115+ this . DateTimeFormat = datetimeFormatAttribute . Format ;
118116 }
119117
120- this . IgnoreSerialized = member . IsDefinedFormatScope < IgnoreSerializedAttribute > ( formatScope ) ;
121- this . IgnoreWhenNull = member . IsDefinedFormatScope < IgnoreWhenNullAttribute > ( formatScope ) ;
122- }
123-
124-
125- /// <summary>
126- /// 属性的描述缓存
127- /// </summary>
128- private static readonly ConcurrentDictionary < ScopeMember , PropertyDescriptor > descriptorCache ;
129-
130- /// <summary>
131- /// 静态构造器
132- /// </summary>
133- static PropertyDescriptor ( )
134- {
135- descriptorCache = new ConcurrentDictionary < ScopeMember , PropertyDescriptor > ( new ScopeMemberComparer ( ) ) ;
136- }
137-
138- /// <summary>
139- /// 获取成员的描述
140- /// </summary>
141- /// <param name="scope">范围</param>
142- /// <param name="member">成员</param>
143- /// <returns></returns>
144- public static PropertyDescriptor GetDescriptor ( FormatScope scope , MemberInfo member )
145- {
146- var scopeProperty = new ScopeMember ( scope , member ) ;
147- return descriptorCache . GetOrAdd ( scopeProperty , ( s ) => new PropertyDescriptor ( s ) ) ;
148- }
149-
150- /// <summary>
151- /// 表示序列化范围属性
152- /// </summary>
153- private class ScopeMember
154- {
155- /// <summary>
156- /// 序列化范围
157- /// </summary>
158- public FormatScope FormatScope { get ; private set ; }
159-
160- /// <summary>
161- /// 属性
162- /// </summary>
163- public MemberInfo MemberInfo { get ; private set ; }
164-
165- /// <summary>
166- /// 序列化范围属性
167- /// </summary>
168- /// <param name="scope"></param>
169- /// <param name="member"></param>
170- public ScopeMember ( FormatScope scope , MemberInfo member )
171- {
172- this . FormatScope = scope ;
173- this . MemberInfo = member ;
174- }
175- }
176-
177- /// <summary>
178- /// 表示序列化范围属性比较器
179- /// </summary>
180- private class ScopeMemberComparer : IEqualityComparer < ScopeMember >
181- {
182- /// <summary>
183- /// 是否相等
184- /// </summary>
185- /// <param name="x"></param>
186- /// <param name="y"></param>
187- /// <returns></returns>
188- public bool Equals ( ScopeMember x , ScopeMember y )
189- {
190- return true ;
191- }
192-
193- /// <summary>
194- /// 获取哈希值
195- /// </summary>
196- /// <param name="obj"></param>
197- /// <returns></returns>
198- public int GetHashCode ( ScopeMember obj )
199- {
200- return obj . FormatScope . GetHashCode ( ) ^ obj . MemberInfo . GetHashCode ( ) ;
201- }
118+ this . IgnoreSerialized = member . IsDefinedFormatScope < IgnoreSerializedAttribute > ( scope ) ;
119+ this . IgnoreWhenNull = member . IsDefinedFormatScope < IgnoreWhenNullAttribute > ( scope ) ;
202120 }
203121 }
204122 }
0 commit comments