@@ -31,8 +31,9 @@ private static bool MemberIsIgnored(MemberInfo memberInfo)
3131 {
3232 return FastClonerCache . GetOrAddMemberIgnoreStatus ( memberInfo , mi =>
3333 {
34- FastClonerIgnoreAttribute ? attribute = mi . GetCustomAttribute < FastClonerIgnoreAttribute > ( ) ;
35- return attribute ? . Ignored ?? false ;
34+ FastClonerIgnoreAttribute ? fcIgnored = mi . GetCustomAttribute < FastClonerIgnoreAttribute > ( ) ;
35+ NonSerializedAttribute ? nonSerialized = mi . GetCustomAttribute < NonSerializedAttribute > ( ) ;
36+ return fcIgnored ? . Ignored ?? nonSerialized is not null ;
3637 } ) ;
3738 }
3839
@@ -193,17 +194,17 @@ private static void AddMemberCloneExpressions(
193194 PropertyInfo pi => pi . PropertyType ,
194195 _ => throw new ArgumentException ( $ "Unsupported member type: { member . GetType ( ) } ")
195196 } ;
196-
197- bool isWritable = member switch
197+
198+ bool canAssignDirect = member switch
198199 {
199200 FieldInfo fi => ! fi . IsInitOnly ,
200201 PropertyInfo pi => pi . CanWrite ,
201202 _ => false
202- } || type . IsClass ( ) && member is FieldInfo { IsInitOnly : true } ;
203+ } ;
203204
204205 if ( MemberIsIgnored ( member ) )
205206 {
206- if ( isWritable )
207+ if ( canAssignDirect )
207208 {
208209 expressionList . Add ( Expression . Assign (
209210 Expression . MakeMemberAccess ( toLocal , member ) ,
@@ -218,7 +219,7 @@ private static void AddMemberCloneExpressions(
218219 {
219220 if ( evtType == memberType )
220221 {
221- if ( isWritable )
222+ if ( canAssignDirect )
222223 {
223224 expressionList . Add ( Expression . Assign (
224225 Expression . MakeMemberAccess ( toLocal , member ) ,
@@ -232,7 +233,7 @@ private static void AddMemberCloneExpressions(
232233
233234 if ( FastClonerCache . IsTypeIgnored ( memberType ) )
234235 {
235- if ( isWritable )
236+ if ( canAssignDirect )
236237 {
237238 expressionList . Add ( Expression . Assign (
238239 Expression . MakeMemberAccess ( toLocal , member ) ,
@@ -245,7 +246,7 @@ private static void AddMemberCloneExpressions(
245246
246247 if ( member is PropertyInfo piLocal )
247248 {
248- if ( isWritable && MemberIsIgnored ( piLocal ) )
249+ if ( piLocal . CanWrite && MemberIsIgnored ( piLocal ) )
249250 {
250251 expressionList . Add ( Expression . Assign (
251252 Expression . Property ( toLocal , piLocal ) ,
@@ -277,7 +278,7 @@ private static void AddMemberCloneExpressions(
277278
278279 if ( shouldBeIgnored )
279280 {
280- if ( member is FieldInfo or PropertyInfo { CanWrite : true } )
281+ if ( canAssignDirect )
281282 {
282283 expressionList . Add ( Expression . Assign (
283284 Expression . MakeMemberAccess ( toLocal , member ) ,
0 commit comments