@@ -344,7 +344,10 @@ internal static ClassDataContract CreateClassDataContractForKeyValue(Type type,
344
344
#if ! NET_NATIVE
345
345
return new ClassDataContract ( type , ns , memberNames ) ;
346
346
#else
347
- return ( ClassDataContract ) DataContract . GetDataContractFromGeneratedAssembly ( type ) ;
347
+ ClassDataContract cdc = ( ClassDataContract ) DataContract . GetDataContractFromGeneratedAssembly ( type ) ;
348
+ ClassDataContract cloned = cdc . Clone ( ) ;
349
+ cloned . UpdateNamespaceAndMembers ( type , ns , memberNames ) ;
350
+ return cloned ;
348
351
#endif
349
352
}
350
353
@@ -1437,6 +1440,38 @@ public int Compare(Member x, Member y)
1437
1440
1438
1441
internal static DataMemberConflictComparer Singleton = new DataMemberConflictComparer ( ) ;
1439
1442
}
1443
+
1444
+ #if NET_NATIVE
1445
+ internal ClassDataContractCriticalHelper Clone ( )
1446
+ {
1447
+ ClassDataContractCriticalHelper clonedHelper = new ClassDataContractCriticalHelper ( this . UnderlyingType ) ;
1448
+
1449
+ clonedHelper . _baseContract = this . _baseContract ;
1450
+ clonedHelper . _childElementNamespaces = this . _childElementNamespaces ;
1451
+ clonedHelper . ContractNamespaces = this . ContractNamespaces ;
1452
+ clonedHelper . _hasDataContract = this . _hasDataContract ;
1453
+ clonedHelper . _isMethodChecked = this . _isMethodChecked ;
1454
+ clonedHelper . _isNonAttributedType = this . _isNonAttributedType ;
1455
+ clonedHelper . IsReference = this . IsReference ;
1456
+ clonedHelper . IsValueType = this . IsValueType ;
1457
+ clonedHelper . MemberNames = this . MemberNames ;
1458
+ clonedHelper . MemberNamespaces = this . MemberNamespaces ;
1459
+ clonedHelper . _members = this . _members ;
1460
+ clonedHelper . Name = this . Name ;
1461
+ clonedHelper . Namespace = this . Namespace ;
1462
+ clonedHelper . _onDeserialized = this . _onDeserialized ;
1463
+ clonedHelper . _onDeserializing = this . _onDeserializing ;
1464
+ clonedHelper . _onSerialized = this . _onSerialized ;
1465
+ clonedHelper . _onSerializing = this . _onSerializing ;
1466
+ clonedHelper . StableName = this . StableName ;
1467
+ clonedHelper . TopLevelElementName = this . TopLevelElementName ;
1468
+ clonedHelper . TopLevelElementNamespace = this . TopLevelElementNamespace ;
1469
+ clonedHelper . _xmlFormatReaderDelegate = this . _xmlFormatReaderDelegate ;
1470
+ clonedHelper . _xmlFormatWriterDelegate = this . _xmlFormatWriterDelegate ;
1471
+
1472
+ return clonedHelper ;
1473
+ }
1474
+ #endif
1440
1475
}
1441
1476
1442
1477
@@ -1471,5 +1506,37 @@ internal Type ObjectType
1471
1506
}
1472
1507
}
1473
1508
#endif
1509
+
1510
+ #if NET_NATIVE
1511
+ internal ClassDataContract Clone ( )
1512
+ {
1513
+ ClassDataContract clonedDc = new ClassDataContract ( this . UnderlyingType ) ;
1514
+ clonedDc . _helper = _helper . Clone ( ) ;
1515
+ clonedDc . ContractNamespaces = this . ContractNamespaces ;
1516
+ clonedDc . ChildElementNamespaces = this . ChildElementNamespaces ;
1517
+ clonedDc . MemberNames = this . MemberNames ;
1518
+ clonedDc . MemberNamespaces = this . MemberNamespaces ;
1519
+ clonedDc . XmlFormatWriterDelegate = this . XmlFormatWriterDelegate ;
1520
+ clonedDc . XmlFormatReaderDelegate = this . XmlFormatReaderDelegate ;
1521
+ return clonedDc ;
1522
+ }
1523
+
1524
+ internal void UpdateNamespaceAndMembers ( Type type , XmlDictionaryString ns , string [ ] memberNames )
1525
+ {
1526
+ this . StableName = new XmlQualifiedName ( GetStableName ( type ) . Name , ns . Value ) ;
1527
+ this . Namespace = ns ;
1528
+ XmlDictionary dictionary = new XmlDictionary ( 1 + memberNames . Length ) ;
1529
+ this . Name = dictionary . Add ( StableName . Name ) ;
1530
+ this . Namespace = ns ;
1531
+ this . ContractNamespaces = new XmlDictionaryString [ ] { ns } ;
1532
+ this . MemberNames = new XmlDictionaryString [ memberNames . Length ] ;
1533
+ this . MemberNamespaces = new XmlDictionaryString [ memberNames . Length ] ;
1534
+ for ( int i = 0 ; i < memberNames . Length ; i ++ )
1535
+ {
1536
+ this . MemberNames [ i ] = dictionary . Add ( memberNames [ i ] ) ;
1537
+ this . MemberNamespaces [ i ] = ns ;
1538
+ }
1539
+ }
1540
+ #endif
1474
1541
}
1475
1542
}
0 commit comments