From dee65c7edd4482806e667c08f05f563990395566 Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Tue, 13 Apr 2021 15:03:44 -0700 Subject: [PATCH 01/10] Address remaining warnings from DataContractSerialization --- .../src/ILLink/ILLink.Suppressions.xml | 389 ------------------ .../Runtime/Serialization/AccessorBuilder.cs | 5 + .../Serialization/ClassDataContract.cs | 58 ++- .../Serialization/CollectionDataContract.cs | 111 ++++- .../Runtime/Serialization/DataContract.cs | 85 +++- .../Serialization/DataContractResolver.cs | 4 + .../Serialization/DataContractSerializer.cs | 29 ++ .../Runtime/Serialization/DataContractSet.cs | 14 + .../DataContractSurrogateCaller.cs | 4 + .../Runtime/Serialization/DataMember.cs | 17 +- .../Runtime/Serialization/EnumDataContract.cs | 13 +- .../GenericParameterDataContract.cs | 12 +- .../System/Runtime/Serialization/Globals.cs | 5 +- .../Json/DataContractJsonSerializer.cs | 43 +- .../Json/JsonClassDataContract.cs | 2 + .../Json/JsonCollectionDataContract.cs | 2 + .../Json/JsonFormatGeneratorStatics.cs | 5 + .../Json/JsonFormatReaderGenerator.cs | 3 + .../Json/JsonFormatWriterGenerator.cs | 5 + .../Json/ReflectionJsonFormatReader.cs | 6 + .../Json/ReflectionJsonFormatWriter.cs | 3 + ...lObjectSerializerReadContextComplexJson.cs | 5 + ...ObjectSerializerWriteContextComplexJson.cs | 12 + .../KnownTypeDataContractResolver.cs | 4 + .../Serialization/PrimitiveDataContract.cs | 107 ++++- .../Serialization/ReflectionClassWriter.cs | 7 + .../Runtime/Serialization/ReflectionReader.cs | 61 ++- .../ReflectionXmlFormatReader.cs | 7 + .../ReflectionXmlFormatWriter.cs | 6 + .../Runtime/Serialization/SchemaExporter.cs | 15 +- .../Serialization/SpecialTypeDataContract.cs | 21 +- .../Serialization/SurrogateDataContract.cs | 15 +- .../Serialization/XPathQueryGenerator.cs | 6 + .../Runtime/Serialization/XmlDataContract.cs | 26 +- .../XmlFormatGeneratorStatics.cs | 36 +- .../Serialization/XmlFormatReaderGenerator.cs | 35 +- .../Serialization/XmlFormatWriterGenerator.cs | 16 + .../Serialization/XmlObjectSerializer.cs | 36 ++ .../XmlObjectSerializerContext.cs | 19 +- .../XmlObjectSerializerReadContext.cs | 24 +- .../XmlObjectSerializerReadContextComplex.cs | 11 + .../XmlObjectSerializerWriteContext.cs | 28 ++ .../XmlObjectSerializerWriteContextComplex.cs | 10 + .../Serialization/XsdDataContractExporter.cs | 15 + .../ref/System.Runtime.Serialization.Json.cs | 30 +- .../ref/System.Runtime.Serialization.Xml.cs | 43 ++ 46 files changed, 961 insertions(+), 449 deletions(-) delete mode 100644 src/libraries/System.Private.DataContractSerialization/src/ILLink/ILLink.Suppressions.xml diff --git a/src/libraries/System.Private.DataContractSerialization/src/ILLink/ILLink.Suppressions.xml b/src/libraries/System.Private.DataContractSerialization/src/ILLink/ILLink.Suppressions.xml deleted file mode 100644 index 7e36a2f01ffabd..00000000000000 --- a/src/libraries/System.Private.DataContractSerialization/src/ILLink/ILLink.Suppressions.xml +++ /dev/null @@ -1,389 +0,0 @@ - - - - - ILLink - IL2026 - member - M:System.Runtime.Serialization.XmlDataContract.GenerateCreateXmlSerializableDelegate - - - ILLink - IL2026 - member - M:System.Runtime.Serialization.XsdDataContractExporter.CanExport(System.Collections.Generic.ICollection{System.Reflection.Assembly}) - - - ILLink - IL2026 - member - M:System.Runtime.Serialization.XsdDataContractExporter.Export(System.Collections.Generic.ICollection{System.Reflection.Assembly}) - - - ILLink - IL2046 - member - M:System.Runtime.Serialization.Json.DataContractJsonSerializerImpl.InternalReadObject(System.Runtime.Serialization.XmlReaderDelegator,System.Boolean) - - - ILLink - IL2046 - member - M:System.Runtime.Serialization.Json.DataContractJsonSerializerImpl.InternalWriteObject(System.Runtime.Serialization.XmlWriterDelegator,System.Object) - - - ILLink - IL2046 - member - M:System.Runtime.Serialization.Json.DataContractJsonSerializerImpl.InternalWriteObjectContent(System.Runtime.Serialization.XmlWriterDelegator,System.Object) - - - ILLink - IL2046 - member - M:System.Runtime.Serialization.Json.ReflectionJsonReader.ReflectionReadDictionaryItem(System.Runtime.Serialization.XmlReaderDelegator,System.Runtime.Serialization.XmlObjectSerializerReadContext,System.Runtime.Serialization.CollectionDataContract) - - - ILLink - IL2046 - member - M:System.Runtime.Serialization.Json.XmlObjectSerializerReadContextComplexJson.ReadDataContractValue(System.Runtime.Serialization.DataContract,System.Runtime.Serialization.XmlReaderDelegator) - - - ILLink - IL2046 - member - M:System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson.WriteDataContractValue(System.Runtime.Serialization.DataContract,System.Runtime.Serialization.XmlWriterDelegator,System.Object,System.RuntimeTypeHandle) - - - ILLink - IL2055 - member - M:System.Runtime.Serialization.ClassDataContract.ClassDataContractCriticalHelper.SetKeyValuePairAdapterFlags(System.Type) - - - ILLink - IL2055 - member - M:System.Runtime.Serialization.CollectionDataContract.CollectionDataContractCriticalHelper.GetCollectionElementType - - - ILLink - IL2055 - member - M:System.Runtime.Serialization.CollectionDataContract.CollectionDataContractCriticalHelper.IncrementCollectionCount(System.Runtime.Serialization.XmlWriterDelegator,System.Object,System.Runtime.Serialization.XmlObjectSerializerWriteContext) - - - ILLink - IL2055 - member - M:System.Runtime.Serialization.CollectionDataContract.IsCollectionOrTryCreate(System.Type,System.Boolean,System.Runtime.Serialization.DataContract@,System.Type@,System.Boolean) - - - ILLink - IL2055 - member - M:System.Runtime.Serialization.DataContract.DataContractCriticalHelper.GetDataContractAdapterType(System.Type) - - - ILLink - IL2055 - member - M:System.Runtime.Serialization.DataContract.ImportKnownTypeAttributes(System.Type,System.Collections.Generic.Dictionary{System.Type,System.Type},System.Collections.Generic.Dictionary{System.Xml.XmlQualifiedName,System.Runtime.Serialization.DataContract}@) - - - ILLink - IL2055 - member - M:System.Runtime.Serialization.Globals.get_TypeOfHashtable - - - ILLink - IL2055 - member - M:System.Runtime.Serialization.ReflectionReader.ReflectionCreateCollection(System.Runtime.Serialization.CollectionDataContract) - - - ILLink - IL2055 - member - M:System.Runtime.Serialization.XmlFormatReaderGenerator.CriticalHelper.GenerateClassReader(System.Runtime.Serialization.ClassDataContract) - - - ILLink - IL2055 - member - M:System.Runtime.Serialization.XmlFormatReaderGenerator.CriticalHelper.ReadCollection(System.Runtime.Serialization.CollectionDataContract) - - - ILLink - IL2055 - member - M:System.Runtime.Serialization.XmlFormatReaderGenerator.CriticalHelper.WrapNullableObject(System.Reflection.Emit.LocalBuilder,System.Reflection.Emit.LocalBuilder,System.Int32) - - - ILLink - IL2055 - member - M:System.Runtime.Serialization.XmlFormatWriterGenerator.CriticalHelper.InitArgs(System.Type) - - - ILLink - IL2055 - member - M:System.Runtime.Serialization.XmlFormatWriterGenerator.CriticalHelper.WriteCollection(System.Runtime.Serialization.CollectionDataContract) - - - ILLink - IL2060 - member - M:System.Runtime.Serialization.CollectionDataContract.CollectionDataContractCriticalHelper.GetEnumeratorForCollection(System.Object) - - - ILLink - IL2060 - member - M:System.Runtime.Serialization.CollectionDataContract.CollectionDataContractCriticalHelper.IncrementCollectionCount(System.Runtime.Serialization.XmlWriterDelegator,System.Object,System.Runtime.Serialization.XmlObjectSerializerWriteContext) - - - ILLink - IL2060 - member - M:System.Runtime.Serialization.FastInvokerBuilder.CreateGetter(System.Reflection.MemberInfo) - - - ILLink - IL2060 - member - M:System.Runtime.Serialization.FastInvokerBuilder.CreateSetter(System.Reflection.MemberInfo) - - - ILLink - IL2060 - member - M:System.Runtime.Serialization.FastInvokerBuilder.GetMakeNewInstanceFunc(System.Type) - - - ILLink - IL2060 - member - M:System.Runtime.Serialization.ReflectionReader.GetCollectionSetItemDelegate``1(System.Runtime.Serialization.CollectionDataContract,System.Object,System.Boolean) - - - ILLink - IL2060 - member - M:System.Runtime.Serialization.ReflectionReader.ReadCollectionItems(System.Runtime.Serialization.XmlReaderDelegator,System.Runtime.Serialization.XmlObjectSerializerReadContext,System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString,System.Runtime.Serialization.CollectionDataContract,System.Object,System.Boolean) - - - ILLink - IL2060 - member - M:System.Runtime.Serialization.XmlFormatGeneratorStatics.GetDefaultValue(System.Type) - - - ILLink - IL2060 - member - M:System.Runtime.Serialization.XmlFormatReaderGenerator.CriticalHelper.ReadCollection(System.Runtime.Serialization.CollectionDataContract) - - - ILLink - IL2060 - member - M:System.Runtime.Serialization.XmlFormatWriterGenerator.CriticalHelper.UnwrapNullableObject(System.Reflection.Emit.LocalBuilder) - - - ILLink - IL2060 - member - M:System.Runtime.Serialization.XmlFormatWriterGenerator.CriticalHelper.WriteCollection(System.Runtime.Serialization.CollectionDataContract) - - - ILLink - IL2067 - member - M:System.Runtime.Serialization.SchemaExporter.InvokeGetSchemaMethod(System.Type,System.Xml.Schema.XmlSchemaSet,System.Xml.XmlQualifiedName) - - - ILLink - IL2067 - member - M:System.Runtime.Serialization.XmlFormatReaderGenerator.UnsafeGetUninitializedObject(System.Type) - - - ILLink - IL2070 - member - M:System.Runtime.Serialization.ClassDataContract.ClassDataContractCriticalHelper.SetKeyValuePairAdapterFlags(System.Type) - - - ILLink - IL2070 - member - M:System.Runtime.Serialization.ClassDataContract.IsNonAttributedTypeValidForSerialization(System.Type) - - - ILLink - IL2070 - member - M:System.Runtime.Serialization.CodeGenerator.BeginMethod(System.String,System.Type,System.Boolean) - - - ILLink - IL2070 - member - M:System.Runtime.Serialization.CollectionDataContract.GetCollectionMethods(System.Type,System.Type,System.Type[],System.Boolean,System.Reflection.MethodInfo@,System.Reflection.MethodInfo@) - - - ILLink - IL2070 - member - M:System.Runtime.Serialization.CollectionDataContract.IsCollectionOrTryCreate(System.Type,System.Boolean,System.Runtime.Serialization.DataContract@,System.Type@,System.Boolean) - - - ILLink - IL2070 - member - M:System.Runtime.Serialization.DataContract.ImportKnownTypeAttributes(System.Type,System.Collections.Generic.Dictionary{System.Type,System.Type},System.Collections.Generic.Dictionary{System.Xml.XmlQualifiedName,System.Runtime.Serialization.DataContract}@) - - - ILLink - IL2070 - member - M:System.Runtime.Serialization.ReflectionClassWriter.ReflectionWriteValue(System.Runtime.Serialization.XmlWriterDelegator,System.Runtime.Serialization.XmlObjectSerializerWriteContext,System.Type,System.Object,System.Boolean,System.Runtime.Serialization.PrimitiveDataContract) - - - ILLink - IL2070 - member - M:System.Runtime.Serialization.SchemaExporter.InvokeSchemaProviderMethod(System.Type,System.Xml.Schema.XmlSchemaSet,System.Xml.XmlQualifiedName@,System.Xml.Schema.XmlSchemaType@,System.Boolean@) - - - ILLink - IL2072 - member - M:System.Runtime.Serialization.ReflectionReader.ReflectionCreateCollection(System.Runtime.Serialization.CollectionDataContract) - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.ClassDataContract.ClassDataContractCriticalHelper.EnsureMethodsImported - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.ClassDataContract.ClassDataContractCriticalHelper.GetISerializableConstructor - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.ClassDataContract.ClassDataContractCriticalHelper.GetNonAttributedTypeConstructor - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.ClassDataContract.ClassDataContractCriticalHelper.ImportDataMembers - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.CollectionDataContract.CollectionDataContractCriticalHelper.GetCollectionElementType - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.CollectionDataContract.FindCollectionMethodsOnInterface(System.Type,System.Type,System.Reflection.MethodInfo@,System.Reflection.MethodInfo@) - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.CollectionDataContract.GetTargetMethodWithName(System.String,System.Type,System.Type) - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.CollectionDataContract.IsCollectionOrTryCreate(System.Type,System.Boolean,System.Runtime.Serialization.DataContract@,System.Type@,System.Boolean) - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.DataContract.DataContractCriticalHelper.get_ParseMethod - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.EnumDataContract.EnumDataContractCriticalHelper.ImportDataMembers - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.ReflectionClassWriter.ReflectionWriteValue(System.Runtime.Serialization.XmlWriterDelegator,System.Runtime.Serialization.XmlObjectSerializerWriteContext,System.Type,System.Object,System.Boolean,System.Runtime.Serialization.PrimitiveDataContract) - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.ReflectionReader.ReflectionCreateCollection(System.Runtime.Serialization.CollectionDataContract) - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.XmlDataContract.GenerateCreateXmlSerializableDelegate - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.XmlDataContract.GetConstructor - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.XmlFormatGeneratorStatics.get_GetArrayLengthMethod - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.XmlFormatGeneratorStatics.get_HashtableCtor - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.XmlFormatReaderGenerator.CriticalHelper.CreateObject(System.Runtime.Serialization.ClassDataContract) - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.XmlFormatReaderGenerator.CriticalHelper.ReadCollection(System.Runtime.Serialization.CollectionDataContract) - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.XmlFormatReaderGenerator.CriticalHelper.WrapNullableObject(System.Reflection.Emit.LocalBuilder,System.Reflection.Emit.LocalBuilder,System.Int32) - - - ILLink - IL2075 - member - M:System.Runtime.Serialization.XmlFormatWriterGenerator.CriticalHelper.WriteCollection(System.Runtime.Serialization.CollectionDataContract) - - - diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/AccessorBuilder.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/AccessorBuilder.cs index 8052ffd0fd7c97..8505e2f25abe03 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/AccessorBuilder.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/AccessorBuilder.cs @@ -3,9 +3,11 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Runtime.Serialization; +using System.Runtime.Serialization.Json; using System.Text; using System.Threading.Tasks; @@ -23,12 +25,14 @@ internal static class FastInvokerBuilder private static readonly MethodInfo s_createSetterInternal = typeof(FastInvokerBuilder).GetMethod(nameof(CreateSetterInternal), BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static)!; private static readonly MethodInfo s_make = typeof(FastInvokerBuilder).GetMethod(nameof(Make), BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static)!; + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public static Func GetMakeNewInstanceFunc(Type type) { Func make = s_make.MakeGenericMethod(type).CreateDelegate>(); return make; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public static Getter CreateGetter(MemberInfo memberInfo) { if (memberInfo is PropertyInfo propInfo) @@ -51,6 +55,7 @@ public static Getter CreateGetter(MemberInfo memberInfo) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public static Setter CreateSetter(MemberInfo memberInfo) { if (memberInfo is PropertyInfo) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs index b1230c1e978080..da3417c2264006 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs @@ -18,6 +18,7 @@ namespace System.Runtime.Serialization using DataContractDictionary = System.Collections.Generic.Dictionary; using System.Linq; using System.Diagnostics.CodeAnalysis; + using System.Runtime.Serialization.Json; internal sealed class ClassDataContract : DataContract { @@ -33,11 +34,13 @@ internal sealed class ClassDataContract : DataContract private bool _isScriptObject; + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal ClassDataContract(Type type) : base(new ClassDataContractCriticalHelper(type)) { InitClassDataContract(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private ClassDataContract(Type type, XmlDictionaryString ns, string[] memberNames) : base(new ClassDataContractCriticalHelper(type, ns, memberNames)) { InitClassDataContract(); @@ -65,6 +68,7 @@ internal List? Members public XmlDictionaryString?[]? ChildElementNamespaces { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_childElementNamespaces == null) @@ -122,6 +126,7 @@ internal MethodInfo? ExtensionDataSetMethod public override DataContractDictionary? KnownDataContracts { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { return _helper.KnownDataContracts; } } @@ -195,6 +200,7 @@ internal MethodInfo? GetKeyValuePairMethodInfo private Func? _makeNewInstance; private Func MakeNewInstance { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_makeNewInstance == null) @@ -206,6 +212,7 @@ private Func MakeNewInstance } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal bool CreateNewInstanceViaDefaultConstructor([NotNullWhen(true)] out object? obj) { ConstructorInfo? ci = GetNonAttributedTypeConstructor(); @@ -228,6 +235,7 @@ internal bool CreateNewInstanceViaDefaultConstructor([NotNullWhen(true)] out obj return true; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private XmlFormatClassWriterDelegate CreateXmlFormatWriterDelegate() { return new XmlFormatWriterGenerator().GenerateClassWriter(this); @@ -235,6 +243,7 @@ private XmlFormatClassWriterDelegate CreateXmlFormatWriterDelegate() internal XmlFormatClassWriterDelegate XmlFormatWriterDelegate { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_helper.XmlFormatWriterDelegate == null) @@ -256,6 +265,7 @@ internal XmlFormatClassWriterDelegate XmlFormatWriterDelegate } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private XmlFormatClassReaderDelegate CreateXmlFormatReaderDelegate() { return new XmlFormatReaderGenerator().GenerateClassReader(this); @@ -263,6 +273,7 @@ private XmlFormatClassReaderDelegate CreateXmlFormatReaderDelegate() internal XmlFormatClassReaderDelegate XmlFormatReaderDelegate { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_helper.XmlFormatReaderDelegate == null) @@ -284,6 +295,7 @@ internal XmlFormatClassReaderDelegate XmlFormatReaderDelegate } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static ClassDataContract CreateClassDataContractForKeyValue(Type type, XmlDictionaryString ns, string[] memberNames) { ClassDataContract? cdc = (ClassDataContract?)DataContract.GetDataContractFromGeneratedAssembly(type); @@ -317,6 +329,7 @@ internal static void CheckAndAddMember(List members, DataMember memb members.Add(memberContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static XmlDictionaryString? GetChildNamespaceToDeclare(DataContract dataContract, Type childType, XmlDictionary dictionary) { childType = DataContract.UnwrapNullableType(childType); @@ -342,7 +355,9 @@ private static bool IsArraySegment(Type t) /// is therefore marked SRR /// Safe - does not let caller influence isNonAttributedType calculation; no harm in leaking value /// - internal static bool IsNonAttributedTypeValidForSerialization(Type type) + internal static bool IsNonAttributedTypeValidForSerialization( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)] + Type type) { if (type.IsArray) return false; @@ -437,6 +452,7 @@ internal static bool IsNonSerializedMember(Type type, string memberName) && members.Contains(memberName); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private XmlDictionaryString?[]? CreateChildElementNamespaces() { if (Members == null) @@ -464,6 +480,7 @@ private void EnsureMethodsImported() _helper.EnsureMethodsImported(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext? context) { Debug.Assert(context != null); @@ -475,6 +492,7 @@ public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, Xml XmlFormatWriterDelegate(xmlWriter, obj, context, this); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext? context) { if (_isScriptObject) @@ -711,7 +729,13 @@ private sealed class ClassDataContractCriticalHelper : DataContract.DataContract public XmlDictionaryString[]? MemberNames; public XmlDictionaryString[]? MemberNamespaces; - internal ClassDataContractCriticalHelper(Type type) : base(type) + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + internal ClassDataContractCriticalHelper([DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods | + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors)] + Type type) : base(type) { XmlQualifiedName stableName = GetStableNameAndSetHasDataContract(type); if (type == Globals.TypeOfDBNull) @@ -823,7 +847,14 @@ internal ClassDataContractCriticalHelper(Type type) : base(type) Globals.TypeOfScriptObject_IsAssignableFrom(this.UnderlyingType); } - internal ClassDataContractCriticalHelper(Type type, XmlDictionaryString ns, string[] memberNames) : base(type) + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + internal ClassDataContractCriticalHelper( + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods)] + Type type, XmlDictionaryString ns, string[] memberNames) : base(type) { this.StableName = new XmlQualifiedName(GetStableNameAndSetHasDataContract(type).Name, ns.Value); ImportDataMembers(); @@ -896,6 +927,7 @@ private void EnsureIsReferenceImported(Type type) [MemberNotNull(nameof(_members))] [MemberNotNull(nameof(Members))] + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void ImportDataMembers() { Type type = this.UnderlyingType; @@ -1075,6 +1107,7 @@ private static bool CanSerializeMember(FieldInfo? field) return field != null && !ClassDataContract.IsNonSerializedMember(field.DeclaringType!, field.Name); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private bool SetIfGetOnlyCollection(DataMember memberContract) { //OK to call IsCollection here since the use of surrogated collection types is not supported in get-only scenarios @@ -1148,6 +1181,7 @@ private void SetIfMembersHaveConflict(List members) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private XmlQualifiedName GetStableNameAndSetHasDataContract(Type type) { return DataContract.GetStableName(type, out _hasDataContract); @@ -1160,7 +1194,9 @@ private XmlQualifiedName GetStableNameAndSetHasDataContract(Type type) /// is dependent on the correct calculation of hasDataContract /// Safe - does not let caller influence isNonAttributedType calculation; no harm in leaking value /// - private void SetIsNonAttributedType(Type type) + private void SetIsNonAttributedType( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)] + Type type) { _isNonAttributedType = !type.IsSerializable && !_hasDataContract && IsNonAttributedTypeValidForSerialization(type); } @@ -1314,6 +1350,8 @@ internal MethodInfo? ExtensionDataSetMethod internal override DataContractDictionary? KnownDataContracts { + + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_knownDataContracts != null) @@ -1362,7 +1400,14 @@ internal bool IsNonAttributedType get { return _isNonAttributedType; } } - private void SetKeyValuePairAdapterFlags(Type type) + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + private void SetKeyValuePairAdapterFlags( + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods | + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors)] + Type type) { if (type.IsGenericType && type.GetGenericTypeDefinition() == Globals.TypeOfKeyValuePairAdapter) { @@ -1491,6 +1536,7 @@ public int Compare(Member x, Member y) internal static DataMemberConflictComparer Singleton = new DataMemberConflictComparer(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal ClassDataContractCriticalHelper Clone() { ClassDataContractCriticalHelper clonedHelper = new ClassDataContractCriticalHelper(this.UnderlyingType); @@ -1552,6 +1598,7 @@ internal Type ObjectType } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal ClassDataContract Clone() { ClassDataContract clonedDc = new ClassDataContract(this.UnderlyingType); @@ -1565,6 +1612,7 @@ internal ClassDataContract Clone() return clonedDc; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void UpdateNamespaceAndMembers(Type type, XmlDictionaryString ns, string[] memberNames) { this.StableName = new XmlQualifiedName(GetStableName(type).Name, ns.Value); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs index 0c25be7988c52f..afbb240141dc3e 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs @@ -16,6 +16,7 @@ namespace System.Runtime.Serialization using DataContractDictionary = System.Collections.Generic.Dictionary; using System.Security; using System.Diagnostics.CodeAnalysis; + using System.Runtime.Serialization.Json; // The interface is a perf optimization. // Only KeyValuePairAdapter should implement the interface. @@ -134,29 +135,34 @@ internal sealed class CollectionDataContract : DataContract private CollectionDataContractCriticalHelper _helper; + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal CollectionDataContract(Type type) : base(new CollectionDataContractCriticalHelper(type)) { InitCollectionDataContract(this); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private CollectionDataContract(Type type, CollectionKind kind, Type itemType, MethodInfo getEnumeratorMethod, string? deserializationExceptionMessage) : base(new CollectionDataContractCriticalHelper(type, kind, itemType, getEnumeratorMethod, deserializationExceptionMessage)) { InitCollectionDataContract(GetSharedTypeContract(type)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private CollectionDataContract(Type type, CollectionKind kind, Type itemType, MethodInfo getEnumeratorMethod, MethodInfo? addMethod, ConstructorInfo? constructor) : base(new CollectionDataContractCriticalHelper(type, kind, itemType, getEnumeratorMethod, addMethod, constructor)) { InitCollectionDataContract(GetSharedTypeContract(type)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private CollectionDataContract(Type type, CollectionKind kind, Type itemType, MethodInfo getEnumeratorMethod, MethodInfo? addMethod, ConstructorInfo? constructor, bool isConstructorCheckRequired) : base(new CollectionDataContractCriticalHelper(type, kind, itemType, getEnumeratorMethod, addMethod, constructor, isConstructorCheckRequired)) { InitCollectionDataContract(GetSharedTypeContract(type)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private CollectionDataContract(Type type, string invalidCollectionInSharedContractMessage) : base(new CollectionDataContractCriticalHelper(type, invalidCollectionInSharedContractMessage)) { InitCollectionDataContract(GetSharedTypeContract(type)); @@ -164,6 +170,7 @@ private CollectionDataContract(Type type, string invalidCollectionInSharedContra [MemberNotNull(nameof(_helper))] [MemberNotNull(nameof(_collectionItemName))] + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void InitCollectionDataContract(DataContract? sharedTypeContract) { _helper = (base.Helper as CollectionDataContractCriticalHelper)!; @@ -196,6 +203,7 @@ public Type ItemType public DataContract ItemContract { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { return _itemContract ?? _helper.ItemContract; @@ -254,6 +262,7 @@ internal bool IsDictionary public XmlDictionaryString? ChildElementNamespace { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_childElementNamespace == null) @@ -311,6 +320,7 @@ internal ConstructorInfo? Constructor public override DataContractDictionary? KnownDataContracts { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { return _helper.KnownDataContracts; } @@ -334,6 +344,7 @@ internal bool IsReadOnlyContract get { return DeserializationExceptionMessage != null; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private XmlFormatCollectionWriterDelegate CreateXmlFormatWriterDelegate() { return new XmlFormatWriterGenerator().GenerateCollectionWriter(this); @@ -341,6 +352,7 @@ private XmlFormatCollectionWriterDelegate CreateXmlFormatWriterDelegate() internal XmlFormatCollectionWriterDelegate XmlFormatWriterDelegate { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_helper.XmlFormatWriterDelegate == null) @@ -362,6 +374,7 @@ internal XmlFormatCollectionWriterDelegate XmlFormatWriterDelegate } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private XmlFormatCollectionReaderDelegate CreateXmlFormatReaderDelegate() { return new XmlFormatReaderGenerator().GenerateCollectionReader(this); @@ -369,6 +382,7 @@ private XmlFormatCollectionReaderDelegate CreateXmlFormatReaderDelegate() internal XmlFormatCollectionReaderDelegate XmlFormatReaderDelegate { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_helper.XmlFormatReaderDelegate == null) @@ -395,6 +409,7 @@ internal XmlFormatCollectionReaderDelegate XmlFormatReaderDelegate } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private XmlFormatGetOnlyCollectionReaderDelegate CreateXmlFormatGetOnlyCollectionReaderDelegate() { return new XmlFormatReaderGenerator().GenerateGetOnlyCollectionReader(this); @@ -403,6 +418,7 @@ private XmlFormatGetOnlyCollectionReaderDelegate CreateXmlFormatGetOnlyCollectio internal XmlFormatGetOnlyCollectionReaderDelegate XmlFormatGetOnlyCollectionReaderDelegate { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_helper.XmlFormatGetOnlyCollectionReaderDelegate == null) @@ -439,16 +455,19 @@ internal XmlFormatGetOnlyCollectionReaderDelegate XmlFormatGetOnlyCollectionRead } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void IncrementCollectionCount(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context) { _helper.IncrementCollectionCount(xmlWriter, obj, context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal IEnumerator GetEnumeratorForCollection(object obj) { return _helper.GetEnumeratorForCollection(obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal Type GetCollectionElementType() { return _helper.GetCollectionElementType(); @@ -504,6 +523,7 @@ internal static Type[] KnownInterfaces } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void Init(CollectionKind kind, Type? itemType, CollectionDataContractAttribute? collectionContractAttribute) { _kind = kind; @@ -559,7 +579,14 @@ private void Init(CollectionKind kind, Type? itemType, CollectionDataContractAtt } // array - internal CollectionDataContractCriticalHelper(Type type) : base(type) + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + internal CollectionDataContractCriticalHelper( + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods)] + Type type) : base(type) { if (type == Globals.TypeOfArray) type = Globals.TypeOfObjectArray; @@ -570,7 +597,15 @@ internal CollectionDataContractCriticalHelper(Type type) : base(type) } // read-only collection - internal CollectionDataContractCriticalHelper(Type type, CollectionKind kind, Type itemType, MethodInfo getEnumeratorMethod, string? deserializationExceptionMessage) + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + internal CollectionDataContractCriticalHelper( + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods)] + Type type, + CollectionKind kind, Type itemType, MethodInfo getEnumeratorMethod, string? deserializationExceptionMessage) : base(type) { if (getEnumeratorMethod == null) @@ -587,7 +622,15 @@ internal CollectionDataContractCriticalHelper(Type type, CollectionKind kind, Ty } // collection - internal CollectionDataContractCriticalHelper(Type type, CollectionKind kind, Type itemType, MethodInfo getEnumeratorMethod, MethodInfo? addMethod, ConstructorInfo? constructor) : base(type) + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + internal CollectionDataContractCriticalHelper( + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods)] + Type type, + CollectionKind kind, Type itemType, MethodInfo getEnumeratorMethod, MethodInfo? addMethod, ConstructorInfo? constructor) : base(type) { if (getEnumeratorMethod == null) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.CollectionMustHaveGetEnumeratorMethod, DataContract.GetClrTypeFullName(type)))); @@ -606,13 +649,22 @@ internal CollectionDataContractCriticalHelper(Type type, CollectionKind kind, Ty } // collection + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal CollectionDataContractCriticalHelper(Type type, CollectionKind kind, Type itemType, MethodInfo getEnumeratorMethod, MethodInfo? addMethod, ConstructorInfo? constructor, bool isConstructorCheckRequired) : this(type, kind, itemType, getEnumeratorMethod, addMethod, constructor) { _isConstructorCheckRequired = isConstructorCheckRequired; } - internal CollectionDataContractCriticalHelper(Type type, string invalidCollectionInSharedContractMessage) : base(type) + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + internal CollectionDataContractCriticalHelper( + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods)] + Type type, + string invalidCollectionInSharedContractMessage) : base(type) { Init(CollectionKind.Collection, null /*itemType*/, null); _invalidCollectionInSharedContractMessage = invalidCollectionInSharedContractMessage; @@ -631,6 +683,7 @@ internal Type ItemType internal DataContract ItemContract { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_itemContract == null) @@ -725,6 +778,7 @@ internal bool IsItemTypeNullable internal override DataContractDictionary? KnownDataContracts { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (!_isKnownTypeAttributeChecked && UnderlyingType != null) @@ -774,6 +828,7 @@ internal XmlFormatGetOnlyCollectionReaderDelegate? XmlFormatGetOnlyCollectionRea private static void DummyIncrementCollectionCount(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context) { } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void IncrementCollectionCount(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context) { if (_incrementCollectionCountDelegate == null) @@ -841,6 +896,7 @@ private static IncrementCollectionCountDelegate BuildIncrementCollectionCountDel private CreateGenericDictionaryEnumeratorDelegate? _createGenericDictionaryEnumeratorDelegate; + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal IEnumerator GetEnumeratorForCollection(object obj) { IEnumerator enumerator = ((IEnumerable)obj).GetEnumerator(); @@ -863,6 +919,7 @@ internal IEnumerator GetEnumeratorForCollection(object obj) return enumerator; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal Type GetCollectionElementType() { Debug.Assert(Kind != CollectionKind.Array, "GetCollectionElementType should not be called on Arrays"); @@ -940,6 +997,7 @@ private static CreateGenericDictionaryEnumeratorDelegate BuildCreateGenericDicti } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private DataContract? GetSharedTypeContract(Type type) { if (type.IsDefined(Globals.TypeOfCollectionDataContractAttribute, false)) @@ -960,23 +1018,27 @@ internal static bool IsCollectionInterface(Type type) return ((IList)KnownInterfaces).Contains(type); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static bool IsCollection(Type type) { Type? itemType; return IsCollection(type, out itemType); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static bool IsCollection(Type type, [NotNullWhen(true)] out Type? itemType) { return IsCollectionHelper(type, out itemType, true /*constructorRequired*/); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static bool IsCollection(Type type, bool constructorRequired) { Type? itemType; return IsCollectionHelper(type, out itemType, constructorRequired); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static bool IsCollectionHelper(Type type, [NotNullWhen(true)] out Type? itemType, bool constructorRequired) { if (type.IsArray && DataContract.GetBuiltInDataContract(type) == null) @@ -988,12 +1050,14 @@ private static bool IsCollectionHelper(Type type, [NotNullWhen(true)] out Type? return IsCollectionOrTryCreate(type, false /*tryCreate*/, out dataContract, out itemType, constructorRequired); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static bool TryCreate(Type type, [NotNullWhen(true)] out DataContract? dataContract) { Type itemType; return IsCollectionOrTryCreate(type, true /*tryCreate*/, out dataContract!, out itemType, true /*constructorRequired*/); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static bool CreateGetOnlyCollectionDataContract(Type type, [NotNullWhen(true)] out DataContract? dataContract) { Type itemType; @@ -1008,6 +1072,7 @@ internal static bool CreateGetOnlyCollectionDataContract(Type type, [NotNullWhen } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static bool TryCreateGetOnlyCollectionDataContract(Type type, [NotNullWhen(true)] out DataContract? dataContract) { dataContract = DataContract.GetDataContractFromGeneratedAssembly(type); @@ -1038,7 +1103,14 @@ internal static bool TryCreateGetOnlyCollectionDataContract(Type type, [NotNullW } } - internal static MethodInfo? GetTargetMethodWithName(string name, Type type, Type interfaceType) + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2075:MakeGenericMethod", + Justification = "Warnings about calling getMethod on the interface type are safe since we are annotating both the type and the " + + "interface with DynamicallyAccessedMembers.")] + internal static MethodInfo? GetTargetMethodWithName(string name, + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] + Type type, + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] + Type interfaceType) { Type? t = type.GetInterfaces().Where(it => it.Equals(interfaceType)).FirstOrDefault(); return t?.GetMethod(name); @@ -1049,6 +1121,7 @@ private static bool IsArraySegment(Type t) return t.IsGenericType && (t.GetGenericTypeDefinition() == typeof(ArraySegment<>)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static bool IsCollectionOrTryCreate(Type type, bool tryCreate, out DataContract? dataContract, out Type itemType, bool constructorRequired) { dataContract = null; @@ -1286,6 +1359,7 @@ internal static bool IsCollectionDataContract(Type type) return type.IsDefined(Globals.TypeOfCollectionDataContractAttribute, false); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static bool HandleIfInvalidCollection(Type type, bool tryCreate, bool hasCollectionDataContract, bool createContractWithException, string message, string? param, ref DataContract? dataContract) { if (hasCollectionDataContract) @@ -1315,7 +1389,15 @@ private static string GetInvalidCollectionMessage(string message, string nestedM return (param == null) ? SR.Format(message, nestedMessage) : SR.Format(message, nestedMessage, param); } - private static void FindCollectionMethodsOnInterface(Type type, Type interfaceType, ref MethodInfo? addMethod, ref MethodInfo? getEnumeratorMethod) + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2075:MakeGenericMethod", + Justification = "Warnings about calling getMethod on the interface type are safe since we are annotating both the type and the " + + "interface with DynamicallyAccessedMembers.")] + private static void FindCollectionMethodsOnInterface( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] + Type type, + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] + Type interfaceType, + ref MethodInfo? addMethod, ref MethodInfo? getEnumeratorMethod) { Type? t = type.GetInterfaces().Where(it => it.Equals(interfaceType)).FirstOrDefault(); if (t != null) @@ -1325,7 +1407,13 @@ private static void FindCollectionMethodsOnInterface(Type type, Type interfaceTy } } - private static void GetCollectionMethods(Type type, Type interfaceType, Type[] addMethodTypeArray, bool addMethodOnInterface, out MethodInfo? getEnumeratorMethod, out MethodInfo? addMethod) + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + private static void GetCollectionMethods( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] + Type type, + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] + Type interfaceType, + Type[] addMethodTypeArray, bool addMethodOnInterface, out MethodInfo? getEnumeratorMethod, out MethodInfo? addMethod) { addMethod = getEnumeratorMethod = null; @@ -1370,11 +1458,16 @@ private static void GetCollectionMethods(Type type, Type interfaceType, Type[] a Type? ienumerableInterface = interfaceType.GetInterfaces().Where(t => t.FullName!.StartsWith("System.Collections.Generic.IEnumerable")).FirstOrDefault(); if (ienumerableInterface == null) ienumerableInterface = Globals.TypeOfIEnumerable; - getEnumeratorMethod = GetTargetMethodWithName(Globals.GetEnumeratorMethodName, type, ienumerableInterface); + getEnumeratorMethod = GetIEnumerableGetEnumeratorMethod(type, ienumerableInterface); } } } + [DynamicDependency(DynamicallyAccessedMemberTypes.PublicMethods, typeof(IEnumerable<>))] + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2067:RequiresUnreferencedCode", + Justification = "Method will be preserved by the DynamicDependency attribute.")] + private static MethodInfo? GetIEnumerableGetEnumeratorMethod(Type type, Type ienumerableInterface) => GetTargetMethodWithName(Globals.GetEnumeratorMethodName, type, ienumerableInterface); + private static bool IsKnownInterface(Type type) { Type typeToCheck = type.IsGenericType ? type.GetGenericTypeDefinition() : type; @@ -1517,6 +1610,7 @@ internal bool RequiresMemberAccessForWrite(SecurityException? securityException) return false; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext? context) { Debug.Assert(context != null); @@ -1526,6 +1620,7 @@ public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, Xml XmlFormatWriterDelegate(xmlWriter, obj, context, this); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext? context) { Debug.Assert(context != null); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs index c7e2d8d8cbfa46..1dd9a6c83a6ba7 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs @@ -18,6 +18,7 @@ namespace System.Runtime.Serialization using System.Collections.Concurrent; using System.Diagnostics.CodeAnalysis; using System.Diagnostics; + using System.Runtime.Serialization.Json; internal abstract class DataContract { @@ -66,16 +67,19 @@ internal MethodInfo? ParseMethod get { return _helper.ParseMethod; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static DataContract GetDataContract(Type type) { return GetDataContract(type.TypeHandle, type); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static DataContract GetDataContract(RuntimeTypeHandle typeHandle, Type type) { return GetDataContract(typeHandle, type, SerializationMode.SharedContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static DataContract GetDataContract(RuntimeTypeHandle typeHandle, Type? type, SerializationMode mode) { int id = GetId(typeHandle); @@ -83,17 +87,20 @@ internal static DataContract GetDataContract(RuntimeTypeHandle typeHandle, Type? return dataContract.GetValidContract(mode); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static DataContract GetDataContract(int id, RuntimeTypeHandle typeHandle, SerializationMode mode) { DataContract dataContract = GetDataContractSkipValidation(id, typeHandle, null); return dataContract.GetValidContract(mode); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static DataContract GetDataContractSkipValidation(int id, RuntimeTypeHandle typeHandle, Type? type) { return DataContractCriticalHelper.GetDataContractSkipValidation(id, typeHandle, type); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static DataContract GetGetOnlyCollectionDataContract(int id, RuntimeTypeHandle typeHandle, Type? type, SerializationMode mode) { DataContract dataContract = GetGetOnlyCollectionDataContractSkipValidation(id, typeHandle, type); @@ -105,6 +112,7 @@ internal static DataContract GetGetOnlyCollectionDataContract(int id, RuntimeTyp return dataContract; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static DataContract GetGetOnlyCollectionDataContractSkipValidation(int id, RuntimeTypeHandle typeHandle, Type? type) { return DataContractCriticalHelper.GetGetOnlyCollectionDataContractSkipValidation(id, typeHandle, type); @@ -125,16 +133,19 @@ internal static int GetId(RuntimeTypeHandle typeHandle) return DataContractCriticalHelper.GetId(typeHandle); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public static DataContract? GetBuiltInDataContract(Type type) { return DataContractCriticalHelper.GetBuiltInDataContract(type); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public static DataContract? GetBuiltInDataContract(string name, string ns) { return DataContractCriticalHelper.GetBuiltInDataContract(name, ns); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public static DataContract? GetBuiltInDataContract(string typeName) { return DataContractCriticalHelper.GetBuiltInDataContract(typeName); @@ -162,6 +173,12 @@ protected DataContractCriticalHelper Helper { return _helper; } } + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods | + DynamicallyAccessedMemberTypes.PublicFields)] public Type UnderlyingType { get @@ -188,16 +205,19 @@ internal Type TypeForInitialization { return _helper.TypeForInitialization; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public virtual void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext? context) { throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.UnexpectedContractType, DataContract.GetClrTypeFullName(this.GetType()), DataContract.GetClrTypeFullName(UnderlyingType)))); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public virtual object? ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext? context) { throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.UnexpectedContractType, DataContract.GetClrTypeFullName(this.GetType()), DataContract.GetClrTypeFullName(UnderlyingType)))); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public virtual void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.UnexpectedContractType, DataContract.GetClrTypeFullName(this.GetType()), DataContract.GetClrTypeFullName(UnderlyingType)))); @@ -237,6 +257,7 @@ public XmlQualifiedName StableName public virtual DataContractDictionary? KnownDataContracts { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { return _helper.KnownDataContracts; } @@ -343,6 +364,12 @@ internal class DataContractCriticalHelper private static readonly object s_namespacesLock = new object(); private static readonly object s_clrTypeStringsLock = new object(); + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods | + DynamicallyAccessedMemberTypes.PublicFields)] private Type _underlyingType; private Type? _originalUnderlyingType; private bool _isReference; @@ -359,6 +386,7 @@ internal class DataContractCriticalHelper /// private Type _typeForInitialization; + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static DataContract GetDataContractSkipValidation(int id, RuntimeTypeHandle typeHandle, Type? type) { DataContract dataContract = s_dataContractCache[id]; @@ -374,6 +402,7 @@ internal static DataContract GetDataContractSkipValidation(int id, RuntimeTypeHa return dataContract; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static DataContract GetGetOnlyCollectionDataContractSkipValidation(int id, RuntimeTypeHandle typeHandle, Type? type) { DataContract dataContract = s_dataContractCache[id]; @@ -453,6 +482,7 @@ internal static int GetId(RuntimeTypeHandle typeHandle) } // check whether a corresponding update is required in ClassDataContract.IsNonAttributedTypeValidForSerialization + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static DataContract CreateDataContract(int id, RuntimeTypeHandle typeHandle, Type? type) { DataContract? dataContract = s_dataContractCache[id]; @@ -483,6 +513,7 @@ private static DataContract CreateDataContract(int id, RuntimeTypeHandle typeHan return dataContract; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static DataContract CreateDataContract(Type type) { type = UnwrapNullableType(type); @@ -537,6 +568,7 @@ private static void AssignDataContractToId(DataContract dataContract, int id) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static DataContract CreateGetOnlyCollectionDataContract(int id, RuntimeTypeHandle typeHandle, Type? type) { DataContract? dataContract = null; @@ -559,6 +591,7 @@ private static DataContract CreateGetOnlyCollectionDataContract(int id, RuntimeT } // This method returns adapter types used at runtime to create DataContract. + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static Type GetDataContractAdapterType(Type type) { // Replace the DataTimeOffset ISerializable type passed in with the internal DateTimeOffsetAdapter DataContract type. @@ -594,6 +627,7 @@ private static RuntimeTypeHandle GetDataContractAdapterTypeHandle(RuntimeTypeHan return typeHandle; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public static DataContract? GetBuiltInDataContract(Type type) { if (type.IsInterface && !CollectionDataContract.IsCollectionInterface(type)) @@ -614,6 +648,7 @@ private static RuntimeTypeHandle GetDataContractAdapterTypeHandle(RuntimeTypeHan } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public static DataContract? GetBuiltInDataContract(string name, string ns) { lock (s_initBuiltInContractsLock) @@ -632,6 +667,7 @@ private static RuntimeTypeHandle GetDataContractAdapterTypeHandle(RuntimeTypeHan } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public static DataContract? GetBuiltInDataContract(string typeName) { if (!typeName.StartsWith("System.", StringComparison.Ordinal)) @@ -710,6 +746,7 @@ private static RuntimeTypeHandle GetDataContractAdapterTypeHandle(RuntimeTypeHan } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public static bool TryCreateBuiltInDataContract(Type type, [NotNullWhen(true)] out DataContract? dataContract) { if (type.IsEnum) // Type.GetTypeCode will report Enums as TypeCode.IntXX @@ -791,6 +828,7 @@ public static bool TryCreateBuiltInDataContract(Type type, [NotNullWhen(true)] o return dataContract != null; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public static bool TryCreateBuiltInDataContract(string name, string ns, [NotNullWhen(true)] out DataContract? dataContract) { dataContract = null; @@ -989,13 +1027,26 @@ internal static void ThrowInvalidDataContractException(string? message, Type? ty throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(message)); } - internal DataContractCriticalHelper(Type type) + internal DataContractCriticalHelper( + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods | + DynamicallyAccessedMemberTypes.PublicFields)] + Type type) { _underlyingType = type; SetTypeForInitialization(type); _isValueType = type.IsValueType; } + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods | + DynamicallyAccessedMemberTypes.PublicFields)] internal Type UnderlyingType { get { return _underlyingType; } @@ -1062,6 +1113,7 @@ internal XmlQualifiedName StableName internal virtual DataContractDictionary? KnownDataContracts { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { return null; } set { /* do nothing */ } } @@ -1161,11 +1213,13 @@ internal void ThrowInvalidDataContractException(string message) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static bool IsTypeSerializable(Type type) { return IsTypeSerializable(type, new HashSet()); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static bool IsTypeSerializable(Type type, HashSet previousCollectionTypes) { Type? itemType; @@ -1277,12 +1331,14 @@ internal static bool IsValidNCName(string name) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static XmlQualifiedName GetStableName(Type type) { bool hasDataContract; return GetStableName(type, out hasDataContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static XmlQualifiedName GetStableName(Type type, out bool hasDataContract) { type = UnwrapRedundantNullableType(type); @@ -1309,6 +1365,7 @@ internal static XmlQualifiedName GetStableName(Type type, out bool hasDataContra return stableName; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static XmlQualifiedName GetDCTypeStableName(Type type, DataContractAttribute dataContractAttribute) { string? name = null, ns = null; @@ -1337,6 +1394,7 @@ private static XmlQualifiedName GetDCTypeStableName(Type type, DataContractAttri return CreateQualifiedName(name, ns); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static XmlQualifiedName GetNonDCTypeStableName(Type type) { string? name = null, ns = null; @@ -1359,6 +1417,7 @@ private static XmlQualifiedName GetNonDCTypeStableName(Type type) return CreateQualifiedName(name, ns); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static bool TryGetBuiltInXmlAndArrayTypeStableName(Type type, [NotNullWhen(true)] out XmlQualifiedName? stableName) { stableName = null; @@ -1401,6 +1460,7 @@ internal static bool TryGetDCAttribute(Type type, [NotNullWhen(true)] out DataCo return dataContractAttribute != null; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static XmlQualifiedName GetCollectionStableName(Type type, Type itemType, out CollectionDataContractAttribute? collectionContractAttribute) { string? name, ns; @@ -1445,6 +1505,7 @@ internal static XmlQualifiedName GetCollectionStableName(Type type, Type itemTyp return CreateQualifiedName(name, ns); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static string GetArrayPrefix(ref Type itemType) { string arrayOfPrefix = string.Empty; @@ -1463,11 +1524,13 @@ internal static string GetCollectionNamespace(string elementNs) return IsBuiltInNamespace(elementNs) ? Globals.CollectionsNamespace : elementNs; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static XmlQualifiedName GetDefaultStableName(Type type) { return CreateQualifiedName(GetDefaultStableLocalName(type), GetDefaultStableNamespace(type)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static string GetDefaultStableLocalName(Type type) { if (type.IsGenericParameter) @@ -1598,12 +1661,14 @@ internal static string GetDefaultStableNamespace(string? clrNs) return new Uri(Globals.DataContractXsdBaseNamespaceUri, clrNs).AbsoluteUri; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static void GetDefaultStableName(string fullTypeName, out string localName, out string ns) { CodeTypeReference typeReference = new CodeTypeReference(fullTypeName); GetDefaultStableName(typeReference, out localName, out ns); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static void GetDefaultStableName(CodeTypeReference typeReference, out string localName, out string ns) { string fullTypeName = typeReference.BaseType; @@ -1869,12 +1934,14 @@ private static byte[] ComputeHash(byte[] namespaces) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static string ExpandGenericParameters(string format, Type type) { GenericNameProvider genericNameProviderForType = new GenericNameProvider(type); return ExpandGenericParameters(format, genericNameProviderForType); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static string ExpandGenericParameters(string format, IGenericNameProvider genericNameProvider) { string? digest = null; @@ -1927,8 +1994,7 @@ internal static bool IsTypeNullable(Type type) type.GetGenericTypeDefinition() == Globals.TypeOfNullable); } - - + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static DataContractDictionary? ImportKnownTypeAttributes(Type type) { DataContractDictionary? knownDataContracts = null; @@ -1937,6 +2003,7 @@ internal static bool IsTypeNullable(Type type) return knownDataContracts; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static void ImportKnownTypeAttributes(Type? type, Dictionary typesChecked, ref DataContractDictionary? knownDataContracts) { while (type != null && DataContract.IsTypeSerializable(type)) @@ -2033,6 +2100,7 @@ private static void ImportKnownTypeAttributes(Type? type, Dictionary } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static void CheckAndAdd(Type type, Dictionary typesChecked, [NotNullIfNotNull("nameToDataContractTable")] ref DataContractDictionary? nameToDataContractTable) { type = DataContract.UnwrapNullableType(type); @@ -2176,10 +2244,15 @@ internal interface IGenericNameProvider { int GetParameterCount(); IList GetNestedParameterCounts(); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] string GetParameterName(int paramIndex); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] string GetNamespaces(); string GetGenericTypeName(); - bool ParametersFromBuiltInNamespaces { get; } + bool ParametersFromBuiltInNamespaces { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + get; + } } internal sealed class GenericNameProvider : IGenericNameProvider @@ -2213,11 +2286,13 @@ public IList GetNestedParameterCounts() return _nestedParamCounts; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public string GetParameterName(int paramIndex) { return GetStableName(paramIndex).Name; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public string GetNamespaces() { StringBuilder namespaces = new StringBuilder(); @@ -2233,6 +2308,7 @@ public string GetGenericTypeName() public bool ParametersFromBuiltInNamespaces { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { bool parametersFromBuiltInNamespaces = true; @@ -2247,6 +2323,7 @@ public bool ParametersFromBuiltInNamespaces } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private XmlQualifiedName GetStableName(int i) { object o = _genericParams[i]; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractResolver.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractResolver.cs index ea96105f2195bd..ca039839323420 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractResolver.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractResolver.cs @@ -1,6 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization.Json; using System.Xml; @@ -8,7 +10,9 @@ namespace System.Runtime.Serialization { public abstract class DataContractResolver { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public abstract bool TryResolveType(Type type, Type? declaredType, DataContractResolver knownTypeResolver, out XmlDictionaryString? typeName, out XmlDictionaryString? typeNamespace); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public abstract Type? ResolveName(string typeName, string? typeNamespace, Type? declaredType, DataContractResolver knownTypeResolver); } } diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSerializer.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSerializer.cs index 30ae159058ff20..5f8f141570025a 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSerializer.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSerializer.cs @@ -16,6 +16,7 @@ namespace System.Runtime.Serialization using System.Runtime.CompilerServices; using DataContractDictionary = System.Collections.Generic.Dictionary; using System.Diagnostics.CodeAnalysis; + using System.Runtime.Serialization.Json; public sealed class DataContractSerializer : XmlObjectSerializer { @@ -171,6 +172,7 @@ public ReadOnlyCollection KnownTypes internal override DataContractDictionary? KnownDataContracts { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (this.knownDataContracts == null && this.knownTypeList != null) @@ -218,6 +220,7 @@ public bool SerializeReadOnlyTypes private DataContract RootContract { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_rootContract == null) @@ -229,11 +232,13 @@ private DataContract RootContract } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override void InternalWriteObject(XmlWriterDelegator writer, object? graph) { InternalWriteObject(writer, graph, null); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override void InternalWriteObject(XmlWriterDelegator writer, object? graph, DataContractResolver? dataContractResolver) { InternalWriteStartObject(writer, graph); @@ -241,86 +246,103 @@ internal override void InternalWriteObject(XmlWriterDelegator writer, object? gr InternalWriteEndObject(writer); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteObject(XmlWriter writer, object? graph) { WriteObjectHandleExceptions(new XmlWriterDelegator(writer), graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteStartObject(XmlWriter writer, object? graph) { WriteStartObjectHandleExceptions(new XmlWriterDelegator(writer), graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteObjectContent(XmlWriter writer, object? graph) { WriteObjectContentHandleExceptions(new XmlWriterDelegator(writer), graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteEndObject(XmlWriter writer) { WriteEndObjectHandleExceptions(new XmlWriterDelegator(writer)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteStartObject(XmlDictionaryWriter writer, object? graph) { WriteStartObjectHandleExceptions(new XmlWriterDelegator(writer), graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteObjectContent(XmlDictionaryWriter writer, object? graph) { WriteObjectContentHandleExceptions(new XmlWriterDelegator(writer), graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteEndObject(XmlDictionaryWriter writer) { WriteEndObjectHandleExceptions(new XmlWriterDelegator(writer)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public void WriteObject(XmlDictionaryWriter writer, object? graph, DataContractResolver? dataContractResolver) { WriteObjectHandleExceptions(new XmlWriterDelegator(writer), graph, dataContractResolver); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadObject(XmlReader reader) { return ReadObjectHandleExceptions(new XmlReaderDelegator(reader), true /*verifyObjectName*/); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadObject(XmlReader reader, bool verifyObjectName) { return ReadObjectHandleExceptions(new XmlReaderDelegator(reader), verifyObjectName); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override bool IsStartObject(XmlReader reader) { return IsStartObjectHandleExceptions(new XmlReaderDelegator(reader)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadObject(XmlDictionaryReader reader, bool verifyObjectName) { return ReadObjectHandleExceptions(new XmlReaderDelegator(reader), verifyObjectName); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override bool IsStartObject(XmlDictionaryReader reader) { return IsStartObjectHandleExceptions(new XmlReaderDelegator(reader)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public object? ReadObject(XmlDictionaryReader reader, bool verifyObjectName, DataContractResolver? dataContractResolver) { return ReadObjectHandleExceptions(new XmlReaderDelegator(reader), verifyObjectName, dataContractResolver); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override void InternalWriteStartObject(XmlWriterDelegator writer, object? graph) { WriteRootElement(writer, RootContract, _rootName, _rootNamespace, _needsContractNsAtRoot); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override void InternalWriteObjectContent(XmlWriterDelegator writer, object? graph) { InternalWriteObjectContent(writer, graph, null); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void InternalWriteObjectContent(XmlWriterDelegator writer, object? graph, DataContractResolver? dataContractResolver) { if (MaxItemsInObjectGraph == 0) @@ -377,6 +399,7 @@ internal void InternalWriteObjectContent(XmlWriterDelegator writer, object? grap } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static DataContract GetDataContract(DataContract declaredTypeContract, Type declaredType, Type objectType) { if (declaredType.IsInterface && CollectionDataContract.IsCollectionInterface(declaredType)) @@ -393,6 +416,7 @@ internal static DataContract GetDataContract(DataContract declaredTypeContract, } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override void InternalWriteEndObject(XmlWriterDelegator writer) { if (!IsRootXmlAny(_rootName, RootContract)) @@ -401,11 +425,13 @@ internal override void InternalWriteEndObject(XmlWriterDelegator writer) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override object? InternalReadObject(XmlReaderDelegator xmlReader, bool verifyObjectName) { return InternalReadObject(xmlReader, verifyObjectName, null); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override object? InternalReadObject(XmlReaderDelegator xmlReader, bool verifyObjectName, DataContractResolver? dataContractResolver) { if (MaxItemsInObjectGraph == 0) @@ -454,6 +480,7 @@ internal override void InternalWriteEndObject(XmlWriterDelegator writer) return context.InternalDeserialize(xmlReader, _rootType, contract, null, null); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override bool InternalIsStartObject(XmlReaderDelegator reader) { return IsRootElement(reader, RootContract, _rootName, _rootNamespace); @@ -470,6 +497,7 @@ internal override bool InternalIsStartObject(XmlReaderDelegator reader) } [return: NotNullIfNotNull("oldObj")] + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static object? SurrogateToDataContractType(ISerializationSurrogateProvider serializationSurrogateProvider, object? oldObj, Type surrogatedDeclaredType, ref Type objType) { object? obj = DataContractSurrogateCaller.GetObjectToSerialize(serializationSurrogateProvider, oldObj, objType, surrogatedDeclaredType); @@ -480,6 +508,7 @@ internal override bool InternalIsStartObject(XmlReaderDelegator reader) return obj; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static Type GetSurrogatedType(ISerializationSurrogateProvider serializationSurrogateProvider, Type type) { return DataContractSurrogateCaller.GetDataContractType(serializationSurrogateProvider, DataContract.UnwrapNullableType(type)); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSet.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSet.cs index 69f10044954474..94573485d6d0d3 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSet.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSet.cs @@ -6,6 +6,8 @@ using System.Collections.Generic; using System.Text; using DataContractDictionary = System.Collections.Generic.Dictionary; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { @@ -30,6 +32,7 @@ internal DataContractSet(IDataContractSurrogate dataContractSurrogate, ICollecti } #endif + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal DataContractSet(DataContractSet dataContractSet) { if (dataContractSet == null) @@ -88,6 +91,7 @@ private Hashtable SurrogateDataTable } #endif + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void Add(Type type) { DataContract dataContract = GetDataContract(type); @@ -101,11 +105,13 @@ internal static void EnsureTypeNotGeneric(Type type) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.GenericTypeNotExportable, type))); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void Add(DataContract dataContract) { Add(dataContract.StableName, dataContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public void Add(XmlQualifiedName name, DataContract dataContract) { if (dataContract.IsBuiltInDataContract) @@ -113,6 +119,7 @@ public void Add(XmlQualifiedName name, DataContract dataContract) InternalAdd(name, dataContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void InternalAdd(XmlQualifiedName name, DataContract dataContract) { DataContract? dataContractInSet = null; @@ -148,6 +155,7 @@ internal void InternalAdd(XmlQualifiedName name, DataContract dataContract) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void AddClassDataContract(ClassDataContract classDataContract) { if (classDataContract.BaseContract != null) @@ -180,6 +188,7 @@ private void AddClassDataContract(ClassDataContract classDataContract) AddKnownDataContracts(classDataContract.KnownDataContracts); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void AddCollectionDataContract(CollectionDataContract collectionDataContract) { if (collectionDataContract.IsDictionary) @@ -196,11 +205,13 @@ private void AddCollectionDataContract(CollectionDataContract collectionDataCont AddKnownDataContracts(collectionDataContract.KnownDataContracts); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void AddXmlDataContract(XmlDataContract xmlDataContract) { AddKnownDataContracts(xmlDataContract.KnownDataContracts); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void AddKnownDataContracts(DataContractDictionary? knownDataContracts) { if (knownDataContracts != null) @@ -212,6 +223,7 @@ private void AddKnownDataContracts(DataContractDictionary? knownDataContracts) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal DataContract GetDataContract(Type clrType) { #if SUPPORT_SURROGATE @@ -241,6 +253,7 @@ internal DataContract GetDataContract(Type clrType) return dataContract; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal DataContract GetMemberTypeDataContract(DataMember dataMember) { Type dataMemberType = dataMember.MemberType; @@ -265,6 +278,7 @@ internal DataContract GetMemberTypeDataContract(DataMember dataMember) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal DataContract GetItemTypeDataContract(CollectionDataContract collectionContract) { if (collectionContract.ItemType != null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSurrogateCaller.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSurrogateCaller.cs index 2ef49f1e56ca69..f2535338889137 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSurrogateCaller.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSurrogateCaller.cs @@ -8,9 +8,11 @@ namespace System.Runtime.Serialization using System.Reflection; using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; + using System.Runtime.Serialization.Json; internal static class DataContractSurrogateCaller { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static Type GetDataContractType(ISerializationSurrogateProvider surrogateProvider, Type type) { if (DataContract.GetBuiltInDataContract(type) != null) @@ -19,6 +21,7 @@ internal static Type GetDataContractType(ISerializationSurrogateProvider surroga } [return: NotNullIfNotNull("obj")] + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static object? GetObjectToSerialize(ISerializationSurrogateProvider surrogateProvider, object? obj, Type objType, Type membertype) { if (obj == null) @@ -29,6 +32,7 @@ internal static Type GetDataContractType(ISerializationSurrogateProvider surroga } [return: NotNullIfNotNull("obj")] + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static object? GetDeserializedObject(ISerializationSurrogateProvider surrogateProvider, object? obj, Type objType, Type memberType) { if (obj == null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs index 47e6106473a1a5..c19538d498020f 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs @@ -8,7 +8,8 @@ using System.Reflection; using System.Xml; using System.Security; - +using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { @@ -89,12 +90,14 @@ internal Type MemberType internal DataContract MemberTypeContract { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { return _helper.MemberTypeContract; } } internal PrimitiveDataContract? MemberPrimitiveContract { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { return _helper.MemberPrimitiveContract; @@ -122,6 +125,7 @@ internal DataMember? ConflictingMember private FastInvokerBuilder.Getter? _getter; internal FastInvokerBuilder.Getter Getter { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_getter == null) @@ -136,6 +140,7 @@ internal FastInvokerBuilder.Getter Getter private FastInvokerBuilder.Setter? _setter; internal FastInvokerBuilder.Setter Setter { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_setter == null) @@ -160,10 +165,16 @@ private sealed class CriticalHelper private bool _hasConflictingNameAndType; private DataMember? _conflictingMember; + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", + Justification = "The only use of this field is on the following property getter which is already " + + "annotated as RequiresUnreferencedCode.")] internal CriticalHelper(MemberInfo memberInfo) { _emitDefaultValue = Globals.DefaultEmitDefaultValue; _memberInfo = memberInfo; +#pragma warning disable IL2026 // Methods annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code + _memberPrimitiveContract = PrimitiveDataContract.NullContract; +#pragma warning restore IL2026 // Methods annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code } internal MemberInfo MemberInfo @@ -228,6 +239,7 @@ internal Type MemberType internal DataContract MemberTypeContract { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_memberTypeContract == null) @@ -262,10 +274,11 @@ internal DataMember? ConflictingMember set { _conflictingMember = value; } } - private PrimitiveDataContract? _memberPrimitiveContract = PrimitiveDataContract.NullContract; + private PrimitiveDataContract? _memberPrimitiveContract; internal PrimitiveDataContract? MemberPrimitiveContract { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_memberPrimitiveContract == PrimitiveDataContract.NullContract) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/EnumDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/EnumDataContract.cs index cbb4d22476fc98..46ed99ff87ed3c 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/EnumDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/EnumDataContract.cs @@ -12,6 +12,7 @@ using System.Security; using System.Linq; using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { @@ -21,6 +22,7 @@ internal sealed class EnumDataContract : DataContract public XmlQualifiedName? BaseContractName { get; set; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal EnumDataContract(Type type) : base(new EnumDataContractCriticalHelper(type)) { _helper = (base.Helper as EnumDataContractCriticalHelper)!; @@ -96,7 +98,14 @@ internal static void Add(Type type, string localName) s_nameToType.Add(stableName, type); } - internal EnumDataContractCriticalHelper(Type type) : base(type) + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + internal EnumDataContractCriticalHelper( + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods)] + Type type) : base(type) { this.StableName = DataContract.GetStableName(type, out _hasDataContract); Type baseType = Enum.GetUnderlyingType(type); @@ -355,11 +364,13 @@ internal long GetEnumValueFromString(string value) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext? context) { WriteEnumValue(xmlWriter, obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext? context) { object obj = ReadEnumValue(xmlReader); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/GenericParameterDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/GenericParameterDataContract.cs index 9eca66158743cf..e507befb094f57 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/GenericParameterDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/GenericParameterDataContract.cs @@ -3,6 +3,8 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { @@ -10,6 +12,7 @@ internal sealed class GenericParameterDataContract : DataContract { private readonly GenericParameterDataContractCriticalHelper _helper; + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal GenericParameterDataContract(Type type) : base(new GenericParameterDataContractCriticalHelper(type)) { @@ -34,7 +37,14 @@ private sealed class GenericParameterDataContractCriticalHelper : DataContract.D { private readonly int _parameterPosition; - internal GenericParameterDataContractCriticalHelper(Type type) + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + internal GenericParameterDataContractCriticalHelper( + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods)] + Type type) : base(type) { SetDataContractName(DataContract.GetStableName(type)); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Globals.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Globals.cs index eb24db27f6a771..92cf68e41b56e5 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Globals.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Globals.cs @@ -11,7 +11,8 @@ using System.Collections.Generic; using System.Linq; using System.Diagnostics; - +using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { @@ -733,6 +734,7 @@ internal static Type TypeOfDictionaryGeneric private static Type? s_typeOfHashtable; internal static Type TypeOfHashtable { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_typeOfHashtable == null) @@ -787,6 +789,7 @@ internal static Uri DataContractXsdBaseNamespaceUri private static readonly Type? s_typeOfScriptObject; + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static ClassDataContract CreateScriptObjectClassDataContract() { Debug.Assert(s_typeOfScriptObject != null); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/DataContractJsonSerializer.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/DataContractJsonSerializer.cs index f29eafb3ddb208..84e514f2863d98 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/DataContractJsonSerializer.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/DataContractJsonSerializer.cs @@ -26,7 +26,7 @@ public sealed class DataContractJsonSerializer : XmlObjectSerializer private const char LOW_SURROGATE_END = (char)0xdfff; private const char MAX_CHAR = (char)0xfffe; private const char WHITESPACE = ' '; - internal const string SerializerTrimmerWarning = "Json Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the " + + internal const string SerializerTrimmerWarning = "Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the " + "required types are preserved."; @@ -110,6 +110,7 @@ public ReadOnlyCollection KnownTypes internal override DataContractDictionary? KnownDataContracts { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (this.knownDataContracts == null && this.knownTypeList != null) @@ -174,6 +175,7 @@ internal static void CheckIfTypeIsReference(DataContract dataContract) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static DataContract GetDataContract(DataContract declaredTypeContract, Type declaredType, Type objectType) { DataContract contract = DataContractSerializer.GetDataContract(declaredTypeContract, declaredType, objectType); @@ -181,36 +183,43 @@ internal static DataContract GetDataContract(DataContract declaredTypeContract, return contract; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteObject(Stream stream, object? graph) { _serializer.WriteObject(stream, graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteObject(XmlWriter writer, object? graph) { _serializer.WriteObject(writer, graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteObject(XmlDictionaryWriter writer, object? graph) { _serializer.WriteObject(writer, graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadObject(Stream stream) { return _serializer.ReadObject(stream); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadObject(XmlReader reader) { return _serializer.ReadObject(reader); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadObject(XmlReader reader, bool verifyObjectName) { return _serializer.ReadObject(reader, verifyObjectName); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadObject(XmlDictionaryReader reader) { return _serializer.ReadObject(reader); @@ -446,46 +455,55 @@ internal static void WriteJsonValue(JsonDataContract contract, XmlWriterDelegato contract.WriteJsonValue(writer, graph, context, declaredTypeHandle); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteStartObject(XmlWriter writer, object? graph) { _serializer.WriteStartObject(writer, graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteStartObject(XmlDictionaryWriter writer, object? graph) { _serializer.WriteStartObject(writer, graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteObjectContent(XmlWriter writer, object? graph) { _serializer.WriteObjectContent(writer, graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteObjectContent(XmlDictionaryWriter writer, object? graph) { _serializer.WriteObjectContent(writer, graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteEndObject(XmlWriter writer) { _serializer.WriteEndObject(writer); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteEndObject(XmlDictionaryWriter writer) { _serializer.WriteEndObject(writer); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadObject(XmlDictionaryReader reader, bool verifyObjectName) { return _serializer.ReadObject(reader, verifyObjectName); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override bool IsStartObject(XmlReader reader) { return _serializer.IsStartObject(reader); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override bool IsStartObject(XmlDictionaryReader reader) { return _serializer.IsStartObject(reader); @@ -572,6 +590,7 @@ public ReadOnlyCollection KnownTypes internal override DataContractDictionary? KnownDataContracts { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (this.knownDataContracts == null && this.knownTypeList != null) @@ -633,6 +652,7 @@ public bool UseSimpleDictionaryFormat private DataContract RootContract { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_rootContract == null) @@ -652,57 +672,66 @@ private XmlDictionaryString RootName } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override bool IsStartObject(XmlReader reader) { // No need to pass in DateTimeFormat to JsonReaderDelegator: no DateTimes will be read in IsStartObject return IsStartObjectHandleExceptions(new JsonReaderDelegator(reader)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override bool IsStartObject(XmlDictionaryReader reader) { // No need to pass in DateTimeFormat to JsonReaderDelegator: no DateTimes will be read in IsStartObject return IsStartObjectHandleExceptions(new JsonReaderDelegator(reader)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadObject(Stream stream) { CheckNull(stream, nameof(stream)); return ReadObject(JsonReaderWriterFactory.CreateJsonReader(stream, XmlDictionaryReaderQuotas.Max)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadObject(XmlReader reader) { return ReadObjectHandleExceptions(new JsonReaderDelegator(reader, this.DateTimeFormat), true); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadObject(XmlReader reader, bool verifyObjectName) { return ReadObjectHandleExceptions(new JsonReaderDelegator(reader, this.DateTimeFormat), verifyObjectName); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadObject(XmlDictionaryReader reader) { return ReadObjectHandleExceptions(new JsonReaderDelegator(reader, this.DateTimeFormat), true); // verifyObjectName } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadObject(XmlDictionaryReader reader, bool verifyObjectName) { return ReadObjectHandleExceptions(new JsonReaderDelegator(reader, this.DateTimeFormat), verifyObjectName); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteEndObject(XmlWriter writer) { // No need to pass in DateTimeFormat to JsonWriterDelegator: no DateTimes will be written in end object WriteEndObjectHandleExceptions(new JsonWriterDelegator(writer)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteEndObject(XmlDictionaryWriter writer) { // No need to pass in DateTimeFormat to JsonWriterDelegator: no DateTimes will be written in end object WriteEndObjectHandleExceptions(new JsonWriterDelegator(writer)); } - + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteObject(Stream stream, object? graph) { CheckNull(stream, nameof(stream)); @@ -711,32 +740,38 @@ public override void WriteObject(Stream stream, object? graph) jsonWriter.Flush(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteObject(XmlWriter writer, object? graph) { WriteObjectHandleExceptions(new JsonWriterDelegator(writer, this.DateTimeFormat), graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteObject(XmlDictionaryWriter writer, object? graph) { WriteObjectHandleExceptions(new JsonWriterDelegator(writer, this.DateTimeFormat), graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteObjectContent(XmlWriter writer, object? graph) { WriteObjectContentHandleExceptions(new JsonWriterDelegator(writer, this.DateTimeFormat), graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteObjectContent(XmlDictionaryWriter writer, object? graph) { WriteObjectContentHandleExceptions(new JsonWriterDelegator(writer, this.DateTimeFormat), graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteStartObject(XmlWriter writer, object? graph) { // No need to pass in DateTimeFormat to JsonWriterDelegator: no DateTimes will be written in start object WriteStartObjectHandleExceptions(new JsonWriterDelegator(writer), graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteStartObject(XmlDictionaryWriter writer, object? graph) { // No need to pass in DateTimeFormat to JsonWriterDelegator: no DateTimes will be written in start object @@ -826,6 +861,7 @@ internal static void WriteJsonValue(JsonDataContract contract, XmlWriterDelegato return (graph == null) ? _rootType : graph.GetType(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override bool InternalIsStartObject(XmlReaderDelegator reader) { if (IsRootElement(reader, RootContract, RootName, XmlDictionaryString.Empty)) @@ -866,6 +902,7 @@ internal override bool InternalIsStartObject(XmlReaderDelegator reader) return context.InternalDeserialize(xmlReader, _rootType, contract, null, null); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override void InternalWriteEndObject(XmlWriterDelegator writer) { writer.WriteEndElement(); @@ -932,6 +969,7 @@ internal override void InternalWriteObjectContent(XmlWriterDelegator writer, obj } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override void InternalWriteStartObject(XmlWriterDelegator writer, object? graph) { if (_rootNameRequiresMapping) @@ -1025,6 +1063,7 @@ internal static void CheckIfTypeIsReference(DataContract dataContract) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static DataContract GetDataContract(DataContract declaredTypeContract, Type declaredType, Type objectType) { DataContract contract = DataContractSerializer.GetDataContract(declaredTypeContract, declaredType, objectType); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonClassDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonClassDataContract.cs index 8b3494225cb083..b0a8adde843432 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonClassDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonClassDataContract.cs @@ -21,6 +21,7 @@ public JsonClassDataContract(ClassDataContract traditionalDataContract) _helper = (base.Helper as JsonClassDataContractCriticalHelper)!; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private JsonFormatClassReaderDelegate CreateJsonFormatReaderDelegate() { return new ReflectionJsonClassReader(TraditionalClassDataContract).ReflectionReadClass; @@ -56,6 +57,7 @@ internal JsonFormatClassReaderDelegate JsonFormatReaderDelegate } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private JsonFormatClassWriterDelegate CreateJsonFormatWriterDelegate() { return new ReflectionJsonFormatWriter().ReflectionWriteClass; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonCollectionDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonCollectionDataContract.cs index 175835807faa24..5790dd3892e370 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonCollectionDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonCollectionDataContract.cs @@ -21,6 +21,7 @@ public JsonCollectionDataContract(CollectionDataContract traditionalDataContract _helper = (base.Helper as JsonCollectionDataContractCriticalHelper)!; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private JsonFormatCollectionReaderDelegate CreateJsonFormatReaderDelegate() { return new ReflectionJsonCollectionReader().ReflectionReadCollection; @@ -56,6 +57,7 @@ internal JsonFormatCollectionReaderDelegate JsonFormatReaderDelegate } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private JsonFormatGetOnlyCollectionReaderDelegate CreateJsonFormatGetOnlyReaderDelegate() { return new ReflectionJsonCollectionReader().ReflectionReadGetOnlyCollection; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatGeneratorStatics.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatGeneratorStatics.cs index 43218be2133044..46184931f01b16 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatGeneratorStatics.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatGeneratorStatics.cs @@ -116,6 +116,7 @@ public static MethodInfo GetCurrentMethod } public static MethodInfo GetItemContractMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_getItemContractMethod == null) @@ -141,6 +142,7 @@ public static MethodInfo GetJsonDataContractMethod } public static MethodInfo GetJsonMemberIndexMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_getJsonMemberIndexMethod == null) @@ -153,6 +155,7 @@ public static MethodInfo GetJsonMemberIndexMethod } public static MethodInfo GetRevisedItemContractMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_getRevisedItemContractMethod == null) @@ -165,6 +168,7 @@ public static MethodInfo GetRevisedItemContractMethod } public static MethodInfo GetUninitializedObjectMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_getUninitializedObjectMethod == null) @@ -395,6 +399,7 @@ public static MethodInfo WriteEndElementMethod } public static MethodInfo WriteJsonISerializableMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_writeJsonISerializableMethod == null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatReaderGenerator.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatReaderGenerator.cs index e4aeed0d50556b..2aeebdc01cc9ad 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatReaderGenerator.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatReaderGenerator.cs @@ -544,6 +544,7 @@ private LocalBuilder ReadValue(Type type, string name) return value; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void InternalDeserialize(LocalBuilder value, Type type, string name) { _ilg.Load(_contextArg); @@ -883,6 +884,7 @@ private void ReadGetOnlyCollection(CollectionDataContract collectionContract) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private bool TryReadPrimitiveArray(Type itemType) { PrimitiveDataContract? primitiveContract = PrimitiveDataContract.GetPrimitiveDataContract(itemType); @@ -956,6 +958,7 @@ private LocalBuilder ReadCollectionItem(CollectionDataContract collectionContrac } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void StoreCollectionValue(LocalBuilder collection, LocalBuilder value, CollectionDataContract collectionContract) { if (collectionContract.Kind == CollectionKind.GenericDictionary || collectionContract.Kind == CollectionKind.Dictionary) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatWriterGenerator.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatWriterGenerator.cs index a39e36802db466..e62527b995433b 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatWriterGenerator.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatWriterGenerator.cs @@ -183,6 +183,7 @@ private void InvokeOnSerialized(ClassDataContract classContract) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void WriteClass(ClassDataContract classContract) { InvokeOnSerializing(classContract); @@ -211,6 +212,7 @@ private void WriteClass(ClassDataContract classContract) InvokeOnSerialized(classContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private int WriteMembers(ClassDataContract classContract, LocalBuilder? extensionDataLocal, ClassDataContract derivedMostClassContract) { int memberCount = (classContract.BaseContract == null) ? 0 : @@ -488,6 +490,7 @@ private void WriteCollection(CollectionDataContract collectionContract) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private bool TryWritePrimitive(Type type, LocalBuilder? value, MemberInfo? memberInfo, LocalBuilder? arrayItemIndex, LocalBuilder? name, int nameIndex) { PrimitiveDataContract? primitiveContract = PrimitiveDataContract.GetPrimitiveDataContract(type); @@ -534,6 +537,7 @@ private bool TryWritePrimitive(Type type, LocalBuilder? value, MemberInfo? membe return true; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private bool TryWritePrimitiveArray(Type type, Type itemType, LocalBuilder value, LocalBuilder itemName) { PrimitiveDataContract? primitiveContract = PrimitiveDataContract.GetPrimitiveDataContract(itemType); @@ -599,6 +603,7 @@ private void WriteObjectAttribute() JsonGlobals.objectString /* value */); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void WriteValue(LocalBuilder memberValue) { Type memberType = memberValue.LocalType; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/ReflectionJsonFormatReader.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/ReflectionJsonFormatReader.cs index e27857f03411fe..e6bb2e9b22504a 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/ReflectionJsonFormatReader.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/ReflectionJsonFormatReader.cs @@ -26,6 +26,7 @@ public ReflectionJsonClassReader(ClassDataContract classDataContract) _reflectionReader = new ReflectionJsonReader(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public object ReflectionReadClass(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContextComplexJson? context, XmlDictionaryString emptyDictionaryString, XmlDictionaryString[]? memberNames) { Debug.Assert(_classContract != null); @@ -37,11 +38,13 @@ internal sealed class ReflectionJsonCollectionReader { private readonly ReflectionReader _reflectionReader = new ReflectionJsonReader(); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public object ReflectionReadCollection(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContextComplexJson context, XmlDictionaryString emptyDictionaryString, XmlDictionaryString itemName, CollectionDataContract collectionContract) { return _reflectionReader.ReflectionReadCollection(xmlReader, context, itemName, emptyDictionaryString/*itemNamespace*/, collectionContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public void ReflectionReadGetOnlyCollection(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContextComplexJson context, XmlDictionaryString emptyDictionaryString, XmlDictionaryString itemName, CollectionDataContract collectionContract) { _reflectionReader.ReflectionReadGetOnlyCollection(xmlReader, context, itemName, emptyDictionaryString/*itemNamespace*/, collectionContract); @@ -50,6 +53,7 @@ public void ReflectionReadGetOnlyCollection(XmlReaderDelegator xmlReader, XmlObj internal sealed class ReflectionJsonReader : ReflectionReader { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected override void ReflectionReadMembers(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString[] memberNames, XmlDictionaryString[]? memberNamespaces, ClassDataContract classContract, ref object obj) { var jsonContext = context as XmlObjectSerializerReadContextComplexJson; @@ -115,6 +119,7 @@ protected override string GetCollectionContractNamespace(CollectionDataContract return DataContractJsonSerializer.ReadJsonValue(itemContract, xmlReader, jsonContext); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected override bool ReflectionReadSpecialCollection(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract collectionContract, object? resultCollection) { var jsonContext = context as XmlObjectSerializerReadContextComplexJson; @@ -130,6 +135,7 @@ protected override bool ReflectionReadSpecialCollection(XmlReaderDelegator xmlRe return false; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void ReadSimpleDictionary(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract collectionContract, Type keyValueType, object? dictionary) { Type[] keyValueTypes = keyValueType.GetGenericArguments(); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/ReflectionJsonFormatWriter.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/ReflectionJsonFormatWriter.cs index c67784eed42c8e..b4949bff24306f 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/ReflectionJsonFormatWriter.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/ReflectionJsonFormatWriter.cs @@ -18,6 +18,7 @@ internal sealed class ReflectionJsonFormatWriter { private readonly ReflectionJsonClassWriter _reflectionClassWriter = new ReflectionJsonClassWriter(); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public void ReflectionWriteClass(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContextComplexJson context, ClassDataContract classContract, XmlDictionaryString[]? memberNames) { _reflectionClassWriter.ReflectionWriteClass(xmlWriter, obj, context, classContract, memberNames); @@ -136,6 +137,7 @@ private void ReflectionWriteObjectAttribute(XmlWriterDelegator xmlWriter) value: JsonGlobals.objectString); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private bool ReflectionTryWritePrimitiveArray(JsonWriterDelegator jsonWriter, object obj, Type underlyingType, Type itemType, XmlDictionaryString collectionItemName) { PrimitiveDataContract? primitiveContract = PrimitiveDataContract.GetPrimitiveDataContract(itemType); @@ -192,6 +194,7 @@ private void ReflectionWriteArrayAttribute(XmlWriterDelegator xmlWriter) internal sealed class ReflectionJsonClassWriter : ReflectionClassWriter { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected override int ReflectionWriteMembers(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract, ClassDataContract derivedMostClassContract, int childElementIndex, XmlDictionaryString[]? memberNames) { Debug.Assert(memberNames != null); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerReadContextComplexJson.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerReadContextComplexJson.cs index c84405311d4094..5dd21b83c96912 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerReadContextComplexJson.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerReadContextComplexJson.cs @@ -40,6 +40,7 @@ internal static XmlObjectSerializerReadContextComplexJson CreateContext(DataCont return DataContractJsonSerializerImpl.ReadJsonValue(dataContract, reader, this); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public int GetJsonMemberIndex(XmlReaderDelegator xmlReader, XmlDictionaryString[] memberNames, int memberIndex, ExtensionDataObject? extensionData) { int length = memberNames.Length; @@ -237,6 +238,8 @@ internal static XmlQualifiedName ParseQualifiedName(string qname) } return new XmlQualifiedName(name, ns); } + + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override DataContract GetDataContract(RuntimeTypeHandle typeHandle, Type? type) { DataContract dataContract = base.GetDataContract(typeHandle, type); @@ -244,6 +247,7 @@ internal override DataContract GetDataContract(RuntimeTypeHandle typeHandle, Typ return dataContract; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override DataContract GetDataContractSkipValidation(int typeId, RuntimeTypeHandle typeHandle, Type? type) { DataContract dataContract = base.GetDataContractSkipValidation(typeId, typeHandle, type); @@ -251,6 +255,7 @@ internal override DataContract GetDataContractSkipValidation(int typeId, Runtime return dataContract; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override DataContract GetDataContract(int id, RuntimeTypeHandle typeHandle) { DataContract dataContract = base.GetDataContract(id, typeHandle); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerWriteContextComplexJson.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerWriteContextComplexJson.cs index ef784e7499c4cb..1dac5b3ca8db00 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerWriteContextComplexJson.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerWriteContextComplexJson.cs @@ -101,6 +101,7 @@ internal static string TruncateDefaultDataContractNamespace(string dataContractN return dataContractNamespace; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected override bool WriteTypeInfo(XmlWriterDelegator writer, DataContract contract, DataContract declaredContract) { if (!((object.ReferenceEquals(contract.Name, declaredContract.Name) && @@ -173,6 +174,7 @@ internal XmlDictionaryString CollectionItemName get { return JsonGlobals.itemDictionaryString; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected override void SerializeWithXsiType(XmlWriterDelegator xmlWriter, object obj, RuntimeTypeHandle objectTypeHandle, Type? objectType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle, Type declaredType) { DataContract dataContract; @@ -204,6 +206,7 @@ protected override void SerializeWithXsiType(XmlWriterDelegator xmlWriter, objec SerializeAndVerifyType(dataContract, xmlWriter, obj, verifyKnownType, declaredType.TypeHandle, declaredType); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void HandleCollectionAssignedToObject(Type declaredType, ref DataContract dataContract, ref object obj, ref bool verifyKnownType) { if ((declaredType != dataContract.UnderlyingType) && (dataContract is CollectionDataContract)) @@ -238,6 +241,7 @@ private void HandleCollectionAssignedToObject(Type declaredType, ref DataContrac } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override void SerializeWithXsiTypeAtTopLevel(DataContract dataContract, XmlWriterDelegator xmlWriter, object obj, RuntimeTypeHandle originalDeclaredTypeHandle, Type graphType) { bool verifyKnownType = false; @@ -258,6 +262,7 @@ internal override void SerializeWithXsiTypeAtTopLevel(DataContract dataContract, SerializeAndVerifyType(dataContract, xmlWriter, obj, verifyKnownType, declaredType.TypeHandle, declaredType); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void VerifyType(DataContract dataContract, Type declaredType) { bool knownTypesAddedInCurrentScope = false; @@ -284,6 +289,7 @@ internal static void WriteJsonNameWithMapping(XmlWriterDelegator xmlWriter, XmlD xmlWriter.WriteAttributeString(null, JsonGlobals.itemString, null, memberNames[index].Value); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override void WriteExtensionDataTypeInfo(XmlWriterDelegator xmlWriter, IDataNode dataNode) { Type dataType = dataNode.DataType; @@ -326,6 +332,7 @@ internal static void VerifyObjectCompatibilityWithInterface(DataContract contrac } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void WriteJsonISerializable(XmlWriterDelegator xmlWriter, ISerializable obj) { Type objType = obj.GetType(); @@ -342,6 +349,7 @@ internal void WriteJsonISerializable(XmlWriterDelegator xmlWriter, ISerializable } [return: NotNullIfNotNull("oldItemContract")] + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static DataContract? GetRevisedItemContract(DataContract oldItemContract) { if ((oldItemContract != null) && @@ -352,6 +360,8 @@ internal void WriteJsonISerializable(XmlWriterDelegator xmlWriter, ISerializable } return oldItemContract; } + + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override DataContract GetDataContract(RuntimeTypeHandle typeHandle, Type? type) { DataContract dataContract = base.GetDataContract(typeHandle, type); @@ -359,6 +369,7 @@ internal override DataContract GetDataContract(RuntimeTypeHandle typeHandle, Typ return dataContract; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override DataContract GetDataContractSkipValidation(int typeId, RuntimeTypeHandle typeHandle, Type? type) { DataContract dataContract = base.GetDataContractSkipValidation(typeId, typeHandle, type); @@ -366,6 +377,7 @@ internal override DataContract GetDataContractSkipValidation(int typeId, Runtime return dataContract; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override DataContract GetDataContract(int id, RuntimeTypeHandle typeHandle) { DataContract dataContract = base.GetDataContract(id, typeHandle); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/KnownTypeDataContractResolver.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/KnownTypeDataContractResolver.cs index 5c5a9291036012..5279bf467398e2 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/KnownTypeDataContractResolver.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/KnownTypeDataContractResolver.cs @@ -3,6 +3,8 @@ using System.Xml; using System.Reflection; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { @@ -16,6 +18,7 @@ internal KnownTypeDataContractResolver(XmlObjectSerializerContext context) _context = context; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override bool TryResolveType(Type type, Type? declaredType, DataContractResolver knownTypeResolver, out XmlDictionaryString? typeName, out XmlDictionaryString? typeNamespace) { if (type == null) @@ -46,6 +49,7 @@ public override bool TryResolveType(Type type, Type? declaredType, DataContractR } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override Type? ResolveName(string typeName, string? typeNamespace, Type? declaredType, DataContractResolver knownTypeResolver) { if (typeName == null || typeNamespace == null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs index 4ca4a4717a3ad2..feec5c8e203a4c 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs @@ -4,28 +4,51 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Reflection; +using System.Runtime.Serialization.Json; using System.Xml; namespace System.Runtime.Serialization { internal abstract class PrimitiveDataContract : DataContract { - internal static readonly PrimitiveDataContract NullContract = new NullPrimitiveDataContract(); + internal static PrimitiveDataContract? s_NullContract; + internal static PrimitiveDataContract NullContract + { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + get + { + if (s_NullContract == null) + { + s_NullContract = new NullPrimitiveDataContract(); + } + return s_NullContract; + } + } private readonly PrimitiveDataContractCriticalHelper _helper; - protected PrimitiveDataContract(Type type, XmlDictionaryString name, XmlDictionaryString ns) : base(new PrimitiveDataContractCriticalHelper(type, name, ns)) + protected PrimitiveDataContract( + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods | + DynamicallyAccessedMemberTypes.PublicFields)] + Type type, XmlDictionaryString name, XmlDictionaryString ns) : base(new PrimitiveDataContractCriticalHelper(type, name, ns)) { _helper = (base.Helper as PrimitiveDataContractCriticalHelper)!; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static PrimitiveDataContract? GetPrimitiveDataContract(Type type) { return DataContract.GetBuiltInDataContract(type) as PrimitiveDataContract; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static PrimitiveDataContract? GetPrimitiveDataContract(string name, string ns) { return DataContract.GetBuiltInDataContract(name, ns) as PrimitiveDataContract; @@ -51,6 +74,8 @@ public override XmlDictionaryString? TopLevelElementNamespace internal MethodInfo XmlFormatWriterMethod { + + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_helper.XmlFormatWriterMethod == null) @@ -66,6 +91,7 @@ internal MethodInfo XmlFormatWriterMethod internal MethodInfo XmlFormatContentWriterMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_helper.XmlFormatContentWriterMethod == null) @@ -91,6 +117,7 @@ internal MethodInfo XmlFormatReaderMethod } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext? context) { xmlWriter.WriteAnyType(obj); @@ -122,7 +149,15 @@ private sealed class PrimitiveDataContractCriticalHelper : DataContract.DataCont private MethodInfo? _xmlFormatContentWriterMethod; private MethodInfo? _xmlFormatReaderMethod; - internal PrimitiveDataContractCriticalHelper(Type type, XmlDictionaryString name, XmlDictionaryString ns) : base(type) + internal PrimitiveDataContractCriticalHelper( + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods | + DynamicallyAccessedMemberTypes.PublicFields)] + Type type, + XmlDictionaryString name, XmlDictionaryString ns) : base(type) { SetDataContractName(name, ns); } @@ -160,17 +195,20 @@ internal CharDataContract(XmlDictionaryString name, XmlDictionaryString ns) : ba internal override string WriteMethodName { get { return "WriteChar"; } } internal override string ReadMethodName { get { return "ReadElementContentAsChar"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteChar((char)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsChar() : HandleReadValue(reader.ReadElementContentAsChar(), context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteChar((char)obj!, name, ns); @@ -191,17 +229,20 @@ public BooleanDataContract() : base(typeof(bool), DictionaryGlobals.BooleanLocal internal override string WriteMethodName { get { return "WriteBoolean"; } } internal override string ReadMethodName { get { return "ReadElementContentAsBoolean"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteBoolean((bool)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsBoolean() : HandleReadValue(reader.ReadElementContentAsBoolean(), context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteBoolean((bool)obj!, name, ns); @@ -217,17 +258,20 @@ public SignedByteDataContract() : base(typeof(sbyte), DictionaryGlobals.SignedBy internal override string WriteMethodName { get { return "WriteSignedByte"; } } internal override string ReadMethodName { get { return "ReadElementContentAsSignedByte"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteSignedByte((sbyte)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsSignedByte() : HandleReadValue(reader.ReadElementContentAsSignedByte(), context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteSignedByte((sbyte)obj!, name, ns); @@ -243,17 +287,20 @@ public UnsignedByteDataContract() : base(typeof(byte), DictionaryGlobals.Unsigne internal override string WriteMethodName { get { return "WriteUnsignedByte"; } } internal override string ReadMethodName { get { return "ReadElementContentAsUnsignedByte"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteUnsignedByte((byte)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsUnsignedByte() : HandleReadValue(reader.ReadElementContentAsUnsignedByte(), context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteUnsignedByte((byte)obj!, name, ns); @@ -269,17 +316,20 @@ public ShortDataContract() : base(typeof(short), DictionaryGlobals.ShortLocalNam internal override string WriteMethodName { get { return "WriteShort"; } } internal override string ReadMethodName { get { return "ReadElementContentAsShort"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteShort((short)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsShort() : HandleReadValue(reader.ReadElementContentAsShort(), context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteShort((short)obj!, name, ns); @@ -295,17 +345,20 @@ public UnsignedShortDataContract() : base(typeof(ushort), DictionaryGlobals.Unsi internal override string WriteMethodName { get { return "WriteUnsignedShort"; } } internal override string ReadMethodName { get { return "ReadElementContentAsUnsignedShort"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteUnsignedShort((ushort)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsUnsignedShort() : HandleReadValue(reader.ReadElementContentAsUnsignedShort(), context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteUnsignedShort((ushort)obj!, name, ns); @@ -314,6 +367,7 @@ public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, internal sealed class NullPrimitiveDataContract : PrimitiveDataContract { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public NullPrimitiveDataContract() : base(typeof(NullPrimitiveDataContract), DictionaryGlobals.EmptyString, DictionaryGlobals.EmptyString) { @@ -335,16 +389,19 @@ internal override string WriteMethodName } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { throw new NotImplementedException(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { throw new NotImplementedException(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { throw new NotImplementedException(); @@ -360,17 +417,20 @@ public IntDataContract() : base(typeof(int), DictionaryGlobals.IntLocalName, Dic internal override string WriteMethodName { get { return "WriteInt"; } } internal override string ReadMethodName { get { return "ReadElementContentAsInt"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteInt((int)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsInt() : HandleReadValue(reader.ReadElementContentAsInt(), context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteInt((int)obj!, name, ns); @@ -386,17 +446,20 @@ public UnsignedIntDataContract() : base(typeof(uint), DictionaryGlobals.Unsigned internal override string WriteMethodName { get { return "WriteUnsignedInt"; } } internal override string ReadMethodName { get { return "ReadElementContentAsUnsignedInt"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteUnsignedInt((uint)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsUnsignedInt() : HandleReadValue(reader.ReadElementContentAsUnsignedInt(), context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteUnsignedInt((uint)obj!, name, ns); @@ -416,17 +479,20 @@ internal LongDataContract(XmlDictionaryString name, XmlDictionaryString ns) : ba internal override string WriteMethodName { get { return "WriteLong"; } } internal override string ReadMethodName { get { return "ReadElementContentAsLong"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteLong((long)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsLong() : HandleReadValue(reader.ReadElementContentAsLong(), context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteLong((long)obj!, name, ns); @@ -467,17 +533,20 @@ public UnsignedLongDataContract() : base(typeof(ulong), DictionaryGlobals.Unsign internal override string WriteMethodName { get { return "WriteUnsignedLong"; } } internal override string ReadMethodName { get { return "ReadElementContentAsUnsignedLong"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteUnsignedLong((ulong)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsUnsignedLong() : HandleReadValue(reader.ReadElementContentAsUnsignedLong(), context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteUnsignedLong((ulong)obj!, name, ns); @@ -493,17 +562,20 @@ public FloatDataContract() : base(typeof(float), DictionaryGlobals.FloatLocalNam internal override string WriteMethodName { get { return "WriteFloat"; } } internal override string ReadMethodName { get { return "ReadElementContentAsFloat"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteFloat((float)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsFloat() : HandleReadValue(reader.ReadElementContentAsFloat(), context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteFloat((float)obj!, name, ns); @@ -519,17 +591,20 @@ public DoubleDataContract() : base(typeof(double), DictionaryGlobals.DoubleLocal internal override string WriteMethodName { get { return "WriteDouble"; } } internal override string ReadMethodName { get { return "ReadElementContentAsDouble"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteDouble((double)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsDouble() : HandleReadValue(reader.ReadElementContentAsDouble(), context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteDouble((double)obj!, name, ns); @@ -545,17 +620,20 @@ public DecimalDataContract() : base(typeof(decimal), DictionaryGlobals.DecimalLo internal override string WriteMethodName { get { return "WriteDecimal"; } } internal override string ReadMethodName { get { return "ReadElementContentAsDecimal"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteDecimal((decimal)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsDecimal() : HandleReadValue(reader.ReadElementContentAsDecimal(), context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteDecimal((decimal)obj!, name, ns); @@ -571,17 +649,20 @@ public DateTimeDataContract() : base(typeof(DateTime), DictionaryGlobals.DateTim internal override string WriteMethodName { get { return "WriteDateTime"; } } internal override string ReadMethodName { get { return "ReadElementContentAsDateTime"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteDateTime((DateTime)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsDateTime() : HandleReadValue(reader.ReadElementContentAsDateTime(), context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteDateTime((DateTime)obj!, name, ns); @@ -601,11 +682,13 @@ internal StringDataContract(XmlDictionaryString name, XmlDictionaryString ns) : internal override string WriteMethodName { get { return "WriteString"; } } internal override string ReadMethodName { get { return "ReadElementContentAsString"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteString((string)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { if (context == null) @@ -618,6 +701,7 @@ public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObj } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { context.WriteString(xmlWriter, (string?)obj, name, ns); @@ -733,11 +817,13 @@ public ByteArrayDataContract() : base(typeof(byte[]), DictionaryGlobals.ByteArra internal override string WriteMethodName { get { return "WriteBase64"; } } internal override string ReadMethodName { get { return "ReadElementContentAsBase64"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteBase64((byte[])obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { if (context == null) @@ -750,6 +836,7 @@ public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObj } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteStartElement(name, ns); @@ -767,11 +854,13 @@ public ObjectDataContract() : base(typeof(object), DictionaryGlobals.ObjectLocal internal override string WriteMethodName { get { return "WriteAnyType"; } } internal override string ReadMethodName { get { return "ReadElementContentAsAnyType"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { // write nothing } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { object obj; @@ -822,17 +911,20 @@ internal TimeSpanDataContract(XmlDictionaryString name, XmlDictionaryString ns) internal override string WriteMethodName { get { return "WriteTimeSpan"; } } internal override string ReadMethodName { get { return "ReadElementContentAsTimeSpan"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteTimeSpan((TimeSpan)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsTimeSpan() : HandleReadValue(reader.ReadElementContentAsTimeSpan(), context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator writer, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { writer.WriteTimeSpan((TimeSpan)obj!, name, ns); @@ -857,17 +949,20 @@ internal GuidDataContract(XmlDictionaryString name, XmlDictionaryString ns) : ba internal override string WriteMethodName { get { return "WriteGuid"; } } internal override string ReadMethodName { get { return "ReadElementContentAsGuid"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteGuid((Guid)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsGuid() : HandleReadValue(reader.ReadElementContentAsGuid(), context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteGuid((Guid)obj!, name, ns); @@ -888,11 +983,13 @@ public UriDataContract() : base(typeof(Uri), DictionaryGlobals.UriLocalName, Dic internal override string WriteMethodName { get { return "WriteUri"; } } internal override string ReadMethodName { get { return "ReadElementContentAsUri"; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteUri((Uri)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { if (context == null) @@ -905,6 +1002,7 @@ public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObj } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator writer, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { writer.WriteUri((Uri?)obj, name, ns); @@ -925,11 +1023,13 @@ internal override bool IsPrimitive get { return false; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteQName((XmlQualifiedName)obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { if (context == null) @@ -942,6 +1042,7 @@ public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObj } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator writer, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { context.WriteQName(writer, (XmlQualifiedName?)obj, name, ns); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionClassWriter.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionClassWriter.cs index 4b0f10bd2cfc0e..848156f0d60e0e 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionClassWriter.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionClassWriter.cs @@ -5,6 +5,7 @@ using System.Collections; using System.Collections.Generic; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Runtime.Serialization.Json; @@ -16,6 +17,7 @@ namespace System.Runtime.Serialization { internal abstract class ReflectionClassWriter { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public void ReflectionWriteClass(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract, XmlDictionaryString[]? memberNames) { InvokeOnSerializing(obj, context, classContract); @@ -37,6 +39,7 @@ public void ReflectionWriteClass(XmlWriterDelegator xmlWriter, object obj, XmlOb InvokeOnSerialized(obj, context, classContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public void ReflectionWriteValue(XmlWriterDelegator xmlWriter, XmlObjectSerializerWriteContext context, Type type, object? value, bool writeXsiType, PrimitiveDataContract? primitiveContractForParamType) { Type memberType = type; @@ -100,13 +103,16 @@ public void ReflectionWriteValue(XmlWriterDelegator xmlWriter, XmlObjectSerializ } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected abstract int ReflectionWriteMembers(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract, ClassDataContract derivedMostClassContract, int childElementIndex, XmlDictionaryString[]? memberNames); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected object? ReflectionGetMemberValue(object obj, DataMember dataMember) { return dataMember.Getter(obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected bool ReflectionTryWritePrimitive(XmlWriterDelegator xmlWriter, XmlObjectSerializerWriteContext context, Type type, object? value, XmlDictionaryString name, XmlDictionaryString? ns, PrimitiveDataContract? primitiveContract) { if (primitiveContract == null || primitiveContract.UnderlyingType == Globals.TypeOfObject) @@ -154,6 +160,7 @@ private object ResolveAdapterType(object obj, ClassDataContract classContract) return obj; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void ReflectionInternalSerialize(XmlWriterDelegator xmlWriter, XmlObjectSerializerWriteContext context, object obj, bool isDeclaredType, bool writeXsiType, Type memberType, bool isNullableOfT = false) { if (isNullableOfT) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs index 2b7103688045c0..0d7cb7642899af 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs @@ -20,13 +20,27 @@ internal abstract class ReflectionReader private delegate object? CollectionReadItemDelegate(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract collectionContract, Type itemType, string itemName, string itemNs); private delegate object CollectionSetItemDelegate(object resultCollection, object? collectionItem, int itemIndex); - private static readonly MethodInfo s_getCollectionSetItemDelegateMethod = typeof(ReflectionReader).GetMethod(nameof(GetCollectionSetItemDelegate), BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)!; + private static MethodInfo? s_getCollectionSetItemDelegateMethod; private static readonly MethodInfo s_objectToKeyValuePairGetKey = typeof(ReflectionReader).GetMethod(nameof(ObjectToKeyValuePairGetKey), BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static)!; private static readonly MethodInfo s_objectToKeyValuePairGetValue = typeof(ReflectionReader).GetMethod(nameof(ObjectToKeyValuePairGetValue), BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static)!; private static readonly Type[] s_arrayConstructorParameters = new Type[] { Globals.TypeOfInt }; private static readonly object[] s_arrayConstructorArguments = new object[] { 32 }; + private static MethodInfo CollectionSetItemDelegateMethod + { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + get + { + if (s_getCollectionSetItemDelegateMethod == null) + { + s_getCollectionSetItemDelegateMethod = typeof(ReflectionReader).GetMethod(nameof(GetCollectionSetItemDelegate), BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance)!; + } + return s_getCollectionSetItemDelegateMethod!; + } + } + + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public object ReflectionReadClass(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext? context, XmlDictionaryString[]? memberNames, XmlDictionaryString[]? memberNamespaces, ClassDataContract classContract) { Debug.Assert(context != null); @@ -57,6 +71,7 @@ public object ReflectionReadClass(XmlReaderDelegator xmlReader, XmlObjectSeriali return obj; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public void ReflectionReadGetOnlyCollection(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString collectionItemName, XmlDictionaryString collectionItemNamespace, CollectionDataContract collectionContract) { object? resultCollection = context.GetCollectionMember(); @@ -78,11 +93,13 @@ public void ReflectionReadGetOnlyCollection(XmlReaderDelegator xmlReader, XmlObj } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public object ReflectionReadCollection(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString collectionItemName, XmlDictionaryString collectionItemNamespace, CollectionDataContract collectionContract) { return ReflectionReadCollectionCore(xmlReader, context, collectionItemName, collectionItemNamespace, collectionContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private object ReflectionReadCollectionCore(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString collectionItemName, XmlDictionaryString collectionItemNamespace, CollectionDataContract collectionContract) { bool isArray = (collectionContract.Kind == CollectionKind.Array); @@ -107,15 +124,13 @@ private object ReflectionReadCollectionCore(XmlReaderDelegator xmlReader, XmlObj return resultCollection; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private CollectionReadItemDelegate GetCollectionReadItemDelegate(CollectionDataContract collectionContract) { CollectionReadItemDelegate collectionReadItemDelegate; if (collectionContract.Kind == CollectionKind.Dictionary || collectionContract.Kind == CollectionKind.GenericDictionary) { - collectionReadItemDelegate = (xmlReaderArg, contextArg, collectionContractArg, itemTypeArg, itemNameArg, itemNsArg) => - { - return ReflectionReadDictionaryItem(xmlReaderArg, contextArg, collectionContractArg); - }; + collectionReadItemDelegate = GetReadDictionaryItemDelegate; } else { @@ -123,15 +138,22 @@ private CollectionReadItemDelegate GetCollectionReadItemDelegate(CollectionDataC } return collectionReadItemDelegate; + + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + object? GetReadDictionaryItemDelegate(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract collectionContract, Type itemType, string itemName, string itemNs) + { + return ReflectionReadDictionaryItem(xmlReader, context, collectionContract); + }; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private object ReadCollectionItems(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString collectionItemName, XmlDictionaryString collectionItemNamespace, CollectionDataContract collectionContract, object resultCollection, bool isReadOnlyCollection) { string itemName = GetCollectionContractItemName(collectionContract); string itemNs = GetCollectionContractNamespace(collectionContract); Type itemType = collectionContract.ItemType; CollectionReadItemDelegate collectionReadItemDelegate = GetCollectionReadItemDelegate(collectionContract); - MethodInfo getCollectionSetItemDelegateMethod = s_getCollectionSetItemDelegateMethod.MakeGenericMethod(itemType); + MethodInfo getCollectionSetItemDelegateMethod = CollectionSetItemDelegateMethod.MakeGenericMethod(itemType); CollectionSetItemDelegate collectionSetItemDelegate = (CollectionSetItemDelegate)getCollectionSetItemDelegateMethod.Invoke(this, new object[] { collectionContract, resultCollection, isReadOnlyCollection })!; int index = 0; @@ -170,12 +192,15 @@ private object ReadCollectionItems(XmlReaderDelegator xmlReader, XmlObjectSerial return resultCollection; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected abstract void ReflectionReadMembers(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString[] memberNames, XmlDictionaryString[]? memberNamespaces, ClassDataContract classContract, ref object obj); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected abstract object? ReflectionReadDictionaryItem(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract collectionContract); protected abstract string GetCollectionContractItemName(CollectionDataContract collectionContract); protected abstract string GetCollectionContractNamespace(CollectionDataContract collectionContract); protected abstract string GetClassContractNamespace(ClassDataContract classContract); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected virtual bool ReflectionReadSpecialCollection(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract collectionContract, object? resultCollection) { return false; @@ -193,6 +218,7 @@ protected int ReflectionGetMembers(ClassDataContract classContract, DataMember[] return memberCount; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected void ReflectionReadMember(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, ClassDataContract classContract, ref object obj, int memberIndex, DataMember[] members) { DataMember dataMember = members[memberIndex]; @@ -215,6 +241,7 @@ protected void ReflectionReadMember(XmlReaderDelegator xmlReader, XmlObjectSeria } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected object? ReflectionReadValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, Type type, string name, string ns, PrimitiveDataContract? primitiveContractForOriginalType = null) { object? value = null; @@ -241,6 +268,7 @@ protected void ReflectionReadMember(XmlReaderDelegator xmlReader, XmlObjectSeria return value; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private object? ReadItemOfPrimitiveType(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, Type type, string name, string ns, PrimitiveDataContract? primitiveContract, int nullables) { object? value; @@ -294,6 +322,7 @@ protected void ReflectionReadMember(XmlReaderDelegator xmlReader, XmlObjectSeria return value; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static object ReadISerializable(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, ClassDataContract classContract) { object obj; @@ -305,6 +334,7 @@ private static object ReadISerializable(XmlReaderDelegator xmlReader, XmlObjectS } // This method is a perf optimization for collections. The original method is ReflectionReadValue. + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private CollectionReadItemDelegate GetReflectionReadValueDelegate(Type type) { int nullables = 0; @@ -317,27 +347,33 @@ private CollectionReadItemDelegate GetReflectionReadValueDelegate(Type type) PrimitiveDataContract? primitiveContract = PrimitiveDataContract.GetPrimitiveDataContract(type); if ((primitiveContract != null && primitiveContract.UnderlyingType != Globals.TypeOfObject) || nullables != 0 || type.IsValueType) { - return (xmlReaderArg, contextArg, collectionContract, typeArg, nameArg, nsArg) => - { - return ReadItemOfPrimitiveType(xmlReaderArg, contextArg, typeArg, nameArg, nsArg, primitiveContract, nullables); - }; + return GetReadItemOfPrimitiveTypeDelegate; } else { return ReflectionInternalDeserialize; } + + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + object? GetReadItemOfPrimitiveTypeDelegate(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract collectionContract, Type itemType, string itemName, string itemNs) + { + return ReadItemOfPrimitiveType(xmlReader, context, itemType, itemName, itemNs, primitiveContract, nullables); + }; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private object? ReflectionGetMemberValue(object obj, DataMember dataMember) { return dataMember.Getter(obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void ReflectionSetMemberValue(ref object obj, object? memberValue, DataMember dataMember) { dataMember.Setter(ref obj, memberValue); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private object? ReflectionReadValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, DataMember dataMember, string ns) { Type type = dataMember.MemberType; @@ -346,6 +382,7 @@ private void ReflectionSetMemberValue(ref object obj, object? memberValue, DataM return ReflectionReadValue(xmlReader, context, type, name, ns, dataMember.MemberPrimitiveContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private object? ReflectionInternalDeserialize(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract? collectionContract, Type type, string name, string ns) { return context.InternalDeserialize(xmlReader, DataContract.GetId(type.TypeHandle), type.TypeHandle, name, ns); @@ -379,6 +416,7 @@ private void InvokeDeserializationCallback(object obj) deserializationCallbackObject?.OnDeserialization(null); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static object CreateObject(ClassDataContract classContract) { object? obj; @@ -429,6 +467,7 @@ private bool IsArrayLikeCollection(CollectionDataContract collectionContract) return collectionContract.Kind == CollectionKind.Array || IsArrayLikeInterface(collectionContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private object ReflectionCreateCollection(CollectionDataContract collectionContract) { if (IsArrayLikeCollection(collectionContract)) @@ -476,6 +515,7 @@ private object ReflectionCreateCollection(CollectionDataContract collectionContr return ((KeyValue)o).Value; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private CollectionSetItemDelegate GetCollectionSetItemDelegate(CollectionDataContract collectionContract, object resultCollectionObject, bool isReadOnlyCollection) { if (isReadOnlyCollection && collectionContract.Kind == CollectionKind.Array) @@ -570,6 +610,7 @@ private CollectionSetItemDelegate GetCollectionSetItemDelegate(CollectionData } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private bool ReflectionTryReadPrimitiveArray(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString collectionItemName, XmlDictionaryString collectionItemNamespace, Type type, Type itemType, int arraySize, [NotNullWhen(true)] out object? resultArray) { resultArray = null; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatReader.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatReader.cs index 9c45733bb2b4ec..9804b40f6f5c36 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatReader.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatReader.cs @@ -10,6 +10,8 @@ using System.Collections.Generic; using System.Security; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { @@ -25,6 +27,7 @@ public ReflectionXmlClassReader(ClassDataContract classDataContract) _reflectionReader = new ReflectionXmlReader(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public object ReflectionReadClass(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext? context, XmlDictionaryString[]? memberNames, XmlDictionaryString[]? memberNamespaces) { return _reflectionReader.ReflectionReadClass(xmlReader, context, memberNames, memberNamespaces, _classContract); @@ -35,11 +38,13 @@ internal sealed class ReflectionXmlCollectionReader { private readonly ReflectionReader _reflectionReader = new ReflectionXmlReader(); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public object ReflectionReadCollection(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString itemName, XmlDictionaryString itemNamespace, CollectionDataContract collectionContract) { return _reflectionReader.ReflectionReadCollection(xmlReader, context, itemName, itemNamespace/*itemNamespace*/, collectionContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public void ReflectionReadGetOnlyCollection(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString itemName, XmlDictionaryString itemNs, CollectionDataContract collectionContract) { _reflectionReader.ReflectionReadGetOnlyCollection(xmlReader, context, itemName, itemNs, collectionContract); @@ -48,6 +53,7 @@ public void ReflectionReadGetOnlyCollection(XmlReaderDelegator xmlReader, XmlObj internal sealed class ReflectionXmlReader : ReflectionReader { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected override void ReflectionReadMembers(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString[] memberNames, XmlDictionaryString[]? memberNamespaces, ClassDataContract classContract, ref object obj) { Debug.Assert(memberNamespaces != null); @@ -109,6 +115,7 @@ protected override string GetCollectionContractNamespace(CollectionDataContract return collectionContract.StableName.Namespace; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected override object? ReflectionReadDictionaryItem(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract collectionContract) { Debug.Assert(collectionContract.Kind == CollectionKind.Dictionary || collectionContract.Kind == CollectionKind.GenericDictionary); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatWriter.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatWriter.cs index 1e53b9f8bae61e..8b8c329a06bfe8 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatWriter.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatWriter.cs @@ -4,8 +4,10 @@ using System.Collections; using System.Collections.Generic; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Reflection.Emit; +using System.Runtime.Serialization.Json; using System.Xml; namespace System.Runtime.Serialization @@ -14,11 +16,13 @@ internal sealed class ReflectionXmlFormatWriter { private readonly ReflectionXmlClassWriter _reflectionClassWriter = new ReflectionXmlClassWriter(); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public void ReflectionWriteClass(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract) { _reflectionClassWriter.ReflectionWriteClass(xmlWriter, obj, context, classContract, null/*memberNames*/); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public void ReflectionWriteCollection(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, CollectionDataContract collectionDataContract) { XmlDictionaryString ns = collectionDataContract.Namespace; @@ -85,6 +89,7 @@ public void ReflectionWriteCollection(XmlWriterDelegator xmlWriter, object obj, } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private bool ReflectionTryWritePrimitiveArray(XmlWriterDelegator xmlWriter, object obj, Type type, Type itemType, XmlDictionaryString collectionItemName, XmlDictionaryString itemNamespace) { PrimitiveDataContract? primitiveContract = PrimitiveDataContract.GetPrimitiveDataContract(itemType); @@ -124,6 +129,7 @@ private bool ReflectionTryWritePrimitiveArray(XmlWriterDelegator xmlWriter, obje internal sealed class ReflectionXmlClassWriter : ReflectionClassWriter { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected override int ReflectionWriteMembers(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract, ClassDataContract derivedMostClassContract, int childElementIndex, XmlDictionaryString[]? emptyStringArray) { int memberCount = (classContract.BaseContract == null) ? 0 : diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SchemaExporter.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SchemaExporter.cs index c6d6daf0f49918..e73399b86f379e 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SchemaExporter.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SchemaExporter.cs @@ -10,6 +10,7 @@ using System.Globalization; using System.IO; using System.Reflection; +using System.Runtime.Serialization.Json; using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; @@ -43,6 +44,7 @@ private XmlDocument XmlDoc } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void Export() { try @@ -78,6 +80,7 @@ private void ExportSerializationSchema() } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void ExportDataContract(DataContract dataContract) { if (dataContract.IsBuiltInDataContract) @@ -118,6 +121,7 @@ private XmlSchemaElement ExportTopLevelElement(DataContract dataContract, XmlSch return topLevelElement; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void ExportClassDataContract(ClassDataContract classDataContract, XmlSchema schema) { XmlSchemaComplexType type = new XmlSchemaComplexType(); @@ -248,6 +252,7 @@ private static XmlElement ExportActualType(XmlQualifiedName typeName, XmlDocumen return actualTypeElement; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private XmlElement ExportGenericInfo(Type clrType, string elementName, string elementNs) { Type? itemType; @@ -340,6 +345,7 @@ private XmlElement ExportGenericInfo(Type clrType, string elementName, string el return null; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void ExportCollectionDataContract(CollectionDataContract collectionDataContract, XmlSchema schema) { XmlSchemaComplexType type = new XmlSchemaComplexType(); @@ -441,6 +447,7 @@ internal static long GetDefaultEnumValue(bool isFlags, int index) return isFlags ? (long)Math.Pow(2, index) : index; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void ExportISerializableDataContract(ClassDataContract dataContract, XmlSchema schema) { XmlSchemaComplexType type = new XmlSchemaComplexType(); @@ -480,6 +487,7 @@ private XmlSchemaComplexContentExtension CreateTypeContent(XmlSchemaComplexType return extension; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void ExportXmlDataContract(XmlDataContract dataContract) { XmlQualifiedName? typeQName; @@ -566,6 +574,7 @@ private static void ReprocessAll(XmlSchemaSet schemas)// and remove duplicate it } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static void GetXmlTypeInfo(Type type, out XmlQualifiedName stableName, out XmlSchemaType? xsdType, out bool hasRoot) { if (IsSpecialXmlType(type, out stableName!, out xsdType, out hasRoot)) @@ -577,6 +586,7 @@ internal static void GetXmlTypeInfo(Type type, out XmlQualifiedName stableName, throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.InvalidXmlDataContractName, DataContract.GetClrTypeFullName(type)))); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static bool InvokeSchemaProviderMethod(Type clrType, XmlSchemaSet schemas, out XmlQualifiedName stableName, out XmlSchemaType? xsdType, out bool hasRoot) { xsdType = null; @@ -667,7 +677,10 @@ private static bool InvokeSchemaProviderMethod(Type clrType, XmlSchemaSet schema return true; } - private static void InvokeGetSchemaMethod(Type clrType, XmlSchemaSet schemas, XmlQualifiedName stableName) + private static void InvokeGetSchemaMethod( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] + Type clrType, + XmlSchemaSet schemas, XmlQualifiedName stableName) { IXmlSerializable ixmlSerializable = (IXmlSerializable)Activator.CreateInstance(clrType)!; XmlSchema? schema = ixmlSerializable.GetSchema(); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SpecialTypeDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SpecialTypeDataContract.cs index 38022467d2b6c7..61798b24c685ee 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SpecialTypeDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SpecialTypeDataContract.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Diagnostics.CodeAnalysis; using System.Xml; namespace System.Runtime.Serialization @@ -9,7 +10,15 @@ internal sealed class SpecialTypeDataContract : DataContract { private readonly SpecialTypeDataContractCriticalHelper _helper; - public SpecialTypeDataContract(Type type, XmlDictionaryString name, XmlDictionaryString ns) : base(new SpecialTypeDataContractCriticalHelper(type, name, ns)) + public SpecialTypeDataContract( + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods | + DynamicallyAccessedMemberTypes.PublicFields)] + Type type, + XmlDictionaryString name, XmlDictionaryString ns) : base(new SpecialTypeDataContractCriticalHelper(type, name, ns)) { _helper = (base.Helper as SpecialTypeDataContractCriticalHelper)!; } @@ -18,7 +27,15 @@ public SpecialTypeDataContract(Type type, XmlDictionaryString name, XmlDictionar private sealed class SpecialTypeDataContractCriticalHelper : DataContract.DataContractCriticalHelper { - internal SpecialTypeDataContractCriticalHelper(Type type, XmlDictionaryString name, XmlDictionaryString ns) : base(type) + internal SpecialTypeDataContractCriticalHelper( + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods | + DynamicallyAccessedMemberTypes.PublicFields)] + Type type, + XmlDictionaryString name, XmlDictionaryString ns) : base(type) { SetDataContractName(name, ns); } diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SurrogateDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SurrogateDataContract.cs index c748213db1398d..3f9f692c190fa7 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SurrogateDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SurrogateDataContract.cs @@ -7,11 +7,14 @@ namespace System.Runtime.Serialization using System.Security; using System.Runtime.CompilerServices; using System.Diagnostics; + using System.Diagnostics.CodeAnalysis; + using System.Runtime.Serialization.Json; internal sealed class SurrogateDataContract : DataContract { private readonly SurrogateDataContractCriticalHelper _helper; + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal SurrogateDataContract(Type type, ISerializationSurrogate serializationSurrogate) : base(new SurrogateDataContractCriticalHelper(type, serializationSurrogate)) { @@ -23,6 +26,7 @@ internal ISerializationSurrogate SerializationSurrogate get { return _helper.SerializationSurrogate; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext? context) { Debug.Assert(context != null); @@ -56,6 +60,7 @@ private void SerializationSurrogateGetObjectData(object obj, SerializationInfo s SerializationSurrogate.GetObjectData(obj, serInfo, context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext? context) { Debug.Assert(context != null); @@ -82,7 +87,15 @@ private sealed class SurrogateDataContractCriticalHelper : DataContract.DataCont { private readonly ISerializationSurrogate serializationSurrogate; - internal SurrogateDataContractCriticalHelper(Type type, ISerializationSurrogate serializationSurrogate) + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + internal SurrogateDataContractCriticalHelper( + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods)] + Type type, + ISerializationSurrogate serializationSurrogate) : base(type) { this.serializationSurrogate = serializationSurrogate; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XPathQueryGenerator.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XPathQueryGenerator.cs index eb7d871ecf1f4c..98adc0bb2b9de5 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XPathQueryGenerator.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XPathQueryGenerator.cs @@ -7,6 +7,8 @@ using System.Globalization; using System.Collections.Generic; using System.Xml; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { @@ -17,12 +19,14 @@ public static class XPathQueryGenerator private const string XPathSeparator = "/"; private const string NsSeparator = ":"; + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public static string CreateFromDataContractSerializer(Type type, MemberInfo[] pathToMember, out XmlNamespaceManager namespaces) { return CreateFromDataContractSerializer(type, pathToMember, null, out namespaces); } // Here you can provide your own root element Xpath which will replace the Xpath of the top level element + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public static string CreateFromDataContractSerializer(Type type, MemberInfo[] pathToMember, StringBuilder? rootElementXpath, out XmlNamespaceManager namespaces) { if (type == null) @@ -56,6 +60,7 @@ public static string CreateFromDataContractSerializer(Type type, MemberInfo[] pa return context.XPath; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static DataContract ProcessDataContract(DataContract contract, ExportContext context, MemberInfo memberNode) { if (contract is ClassDataContract) @@ -65,6 +70,7 @@ private static DataContract ProcessDataContract(DataContract contract, ExportCon throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.QueryGeneratorPathToMemberNotFound)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static DataContract ProcessClassDataContract(ClassDataContract contract, ExportContext context, MemberInfo memberNode) { string prefix = context.SetNamespace(contract.Namespace!.Value); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlDataContract.cs index f47a2f0a9dc33a..14bfc5e763f850 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlDataContract.cs @@ -14,12 +14,15 @@ namespace System.Runtime.Serialization using System.Security; using System.Linq; using System.Runtime.CompilerServices; + using System.Diagnostics.CodeAnalysis; + using System.Runtime.Serialization.Json; internal delegate IXmlSerializable CreateXmlSerializableDelegate(); internal sealed class XmlDataContract : DataContract { private readonly XmlDataContractCriticalHelper _helper; + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal XmlDataContract(Type type) : base(new XmlDataContractCriticalHelper(type)) { _helper = (base.Helper as XmlDataContractCriticalHelper)!; @@ -27,6 +30,7 @@ internal XmlDataContract(Type type) : base(new XmlDataContractCriticalHelper(typ public override DataContractDictionary? KnownDataContracts { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { return _helper.KnownDataContracts; } @@ -82,6 +86,7 @@ internal bool IsTopLevelElementNullable internal CreateXmlSerializableDelegate CreateXmlSerializableDelegate { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { // We create XmlSerializableDelegate via CodeGen when CodeGen is enabled; @@ -122,7 +127,14 @@ private sealed class XmlDataContractCriticalHelper : DataContract.DataContractCr private CreateXmlSerializableDelegate? _createXmlSerializable; private XmlSchemaType? _xsdType; - internal XmlDataContractCriticalHelper(Type type) : base(type) + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + internal XmlDataContractCriticalHelper( + [DynamicallyAccessedMembers( + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods)] + Type type) : base(type) { if (type.IsDefined(Globals.TypeOfDataContractAttribute, false)) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.IXmlSerializableCannotHaveDataContract, DataContract.GetClrTypeFullName(type)))); @@ -167,6 +179,7 @@ internal XmlDataContractCriticalHelper(Type type) : base(type) internal override DataContractDictionary? KnownDataContracts { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (!_isKnownTypeAttributeChecked && UnderlyingType != null) @@ -236,18 +249,17 @@ internal CreateXmlSerializableDelegate? CreateXmlSerializableDelegate private ConstructorInfo? GetConstructor() { - Type type = UnderlyingType; - - if (type.IsValueType) + if (UnderlyingType.IsValueType) return null; - ConstructorInfo? ctor = type.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, Type.EmptyTypes); + ConstructorInfo? ctor = UnderlyingType.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, Type.EmptyTypes); if (ctor == null) - throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.IXmlSerializableMustHaveDefaultConstructor, DataContract.GetClrTypeFullName(type)))); + throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.IXmlSerializableMustHaveDefaultConstructor, DataContract.GetClrTypeFullName(UnderlyingType)))); return ctor; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal CreateXmlSerializableDelegate GenerateCreateXmlSerializableDelegate() { Type type = this.UnderlyingType; @@ -364,6 +376,7 @@ internal IXmlSerializable ReflectionCreateXmlSerializable(Type type) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext? context) { if (context == null) @@ -372,6 +385,7 @@ public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, Xml context.WriteIXmlSerializable(xmlWriter, obj); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext? context) { object? o; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs index 654ab81627bce2..1d9378100f4b41 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs @@ -5,6 +5,8 @@ using System.Xml; using System.Collections; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { @@ -115,6 +117,7 @@ internal static MethodInfo GetCurrentMethod private static MethodInfo? s_getItemContractMethod; internal static MethodInfo GetItemContractMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_getItemContractMethod == null) @@ -157,6 +160,7 @@ internal static MethodInfo IsStartElementMethod0 private static MethodInfo? s_getUninitializedObjectMethod; internal static MethodInfo GetUninitializedObjectMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_getUninitializedObjectMethod == null) @@ -204,6 +208,7 @@ internal static PropertyInfo NodeTypeProperty private static ConstructorInfo? s_hashtableCtor; internal static ConstructorInfo HashtableCtor { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_hashtableCtor == null) @@ -344,6 +349,7 @@ internal static MethodInfo IncrementItemCountMethod private static MethodInfo? s_internalDeserializeMethod; internal static MethodInfo InternalDeserializeMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_internalDeserializeMethod == null) @@ -372,6 +378,7 @@ internal static MethodInfo MoveToNextElementMethod private static MethodInfo? s_getMemberIndexMethod; internal static MethodInfo GetMemberIndexMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_getMemberIndexMethod == null) @@ -386,6 +393,7 @@ internal static MethodInfo GetMemberIndexMethod private static MethodInfo? s_getMemberIndexWithRequiredMembersMethod; internal static MethodInfo GetMemberIndexWithRequiredMembersMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_getMemberIndexWithRequiredMembersMethod == null) @@ -428,6 +436,7 @@ internal static MethodInfo SkipUnknownElementMethod private static MethodInfo? s_readIfNullOrRefMethod; internal static MethodInfo ReadIfNullOrRefMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_readIfNullOrRefMethod == null) @@ -596,6 +605,9 @@ internal static MethodInfo CheckEndOfArrayMethod private static MethodInfo? s_getArrayLengthMethod; internal static MethodInfo GetArrayLengthMethod { + [DynamicDependency(DynamicallyAccessedMemberTypes.PublicProperties, typeof(Array))] + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2075:RequiresUnreferencedCode", + Justification = "The DynamicDependency attribute ensures that the right members are preserved.")] get { if (s_getArrayLengthMethod == null) @@ -624,6 +636,7 @@ internal static MethodInfo CreateSerializationExceptionMethod private static MethodInfo? s_readSerializationInfoMethod; internal static MethodInfo ReadSerializationInfoMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_readSerializationInfoMethod == null) @@ -652,6 +665,7 @@ internal static MethodInfo CreateUnexpectedStateExceptionMethod private static MethodInfo? s_internalSerializeReferenceMethod; internal static MethodInfo InternalSerializeReferenceMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_internalSerializeReferenceMethod == null) @@ -666,6 +680,7 @@ internal static MethodInfo InternalSerializeReferenceMethod private static MethodInfo? s_internalSerializeMethod; internal static MethodInfo InternalSerializeMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_internalSerializeMethod == null) @@ -680,6 +695,7 @@ internal static MethodInfo InternalSerializeMethod private static MethodInfo? s_writeNullMethod; internal static MethodInfo WriteNullMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_writeNullMethod == null) @@ -747,6 +763,7 @@ internal static MethodInfo GetDefaultValueMethod } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static object? GetDefaultValue(Type type) { return GetDefaultValueMethod.MakeGenericMethod(type).Invoke(null, Array.Empty()); @@ -797,6 +814,7 @@ internal static MethodInfo GetHasValueMethod private static MethodInfo? s_writeISerializableMethod; internal static MethodInfo WriteISerializableMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_writeISerializableMethod == null) @@ -824,12 +842,23 @@ internal static MethodInfo IsMemberTypeSameAsMemberValue } private static MethodInfo? s_writeExtensionDataMethod; - internal static MethodInfo WriteExtensionDataMethod => s_writeExtensionDataMethod ?? - (s_writeExtensionDataMethod = typeof(XmlObjectSerializerWriteContext).GetMethod("WriteExtensionData", Globals.ScanAllMembers)!); + internal static MethodInfo WriteExtensionDataMethod + { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + get + { + if (s_writeExtensionDataMethod == null) + { + s_writeExtensionDataMethod = typeof(XmlObjectSerializerWriteContext).GetMethod("WriteExtensionData", Globals.ScanAllMembers)!; + } + return s_writeExtensionDataMethod; + } + } private static MethodInfo? s_writeXmlValueMethod; internal static MethodInfo WriteXmlValueMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_writeXmlValueMethod == null) @@ -844,6 +873,7 @@ internal static MethodInfo WriteXmlValueMethod private static MethodInfo? s_readXmlValueMethod; internal static MethodInfo ReadXmlValueMethod { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_readXmlValueMethod == null) @@ -904,6 +934,7 @@ internal static FieldInfo MemberNamesField private static PropertyInfo? s_childElementNamespacesProperty; internal static PropertyInfo ChildElementNamespacesProperty { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_childElementNamespacesProperty == null) @@ -932,6 +963,7 @@ internal static PropertyInfo CollectionItemNameProperty private static PropertyInfo? s_childElementNamespaceProperty; internal static PropertyInfo ChildElementNamespaceProperty { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_childElementNamespaceProperty == null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatReaderGenerator.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatReaderGenerator.cs index 0a716e0468ccc6..79204f93de0499 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatReaderGenerator.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatReaderGenerator.cs @@ -13,6 +13,7 @@ using System.Runtime.CompilerServices; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { @@ -30,16 +31,19 @@ public XmlFormatReaderGenerator() _helper = new CriticalHelper(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public XmlFormatClassReaderDelegate GenerateClassReader(ClassDataContract classContract) { return _helper.GenerateClassReader(classContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public XmlFormatCollectionReaderDelegate GenerateCollectionReader(CollectionDataContract collectionContract) { return _helper.GenerateCollectionReader(collectionContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public XmlFormatGetOnlyCollectionReaderDelegate GenerateGetOnlyCollectionReader(CollectionDataContract collectionContract) { return _helper.GenerateGetOnlyCollectionReader(collectionContract); @@ -61,11 +65,13 @@ private sealed class CriticalHelper private ArgBuilder _memberNamespacesArg = null!; // initialized in InitArgs private ArgBuilder? _collectionContractArg; + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private XmlFormatClassReaderDelegate CreateReflectionXmlClassReader(ClassDataContract classContract) { return new ReflectionXmlClassReader(classContract).ReflectionReadClass; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public XmlFormatClassReaderDelegate GenerateClassReader(ClassDataContract classContract) { if (DataContractSerializer.Option == SerializationOption.ReflectionOnly) @@ -149,11 +155,13 @@ public XmlFormatClassReaderDelegate GenerateClassReader(ClassDataContract classC } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private XmlFormatCollectionReaderDelegate CreateReflectionXmlCollectionReader() { return new ReflectionXmlCollectionReader().ReflectionReadCollection; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public XmlFormatCollectionReaderDelegate GenerateCollectionReader(CollectionDataContract collectionContract) { if (DataContractSerializer.Option == SerializationOption.ReflectionOnly) @@ -170,11 +178,13 @@ public XmlFormatCollectionReaderDelegate GenerateCollectionReader(CollectionData } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private XmlFormatGetOnlyCollectionReaderDelegate CreateReflectionReadGetOnlyCollectionReader() { return new ReflectionXmlCollectionReader().ReflectionReadGetOnlyCollection; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public XmlFormatGetOnlyCollectionReaderDelegate GenerateGetOnlyCollectionReader(CollectionDataContract collectionContract) { if (DataContractSerializer.Option == SerializationOption.ReflectionOnly) @@ -230,6 +240,7 @@ private void InitArgs() [MemberNotNull(nameof(_objectType))] [MemberNotNull(nameof(_objectLocal))] + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void CreateObject(ClassDataContract classContract) { Type type = _objectType = classContract.UnderlyingType; @@ -240,7 +251,7 @@ private void CreateObject(ClassDataContract classContract) if (classContract.UnderlyingType == Globals.TypeOfDBNull) { - _ilg.LoadMember(Globals.TypeOfDBNull.GetField("Value")!); + _ilg.LoadMember(GetDBNullValueField()); _ilg.Stloc(_objectLocal); } else if (classContract.IsNonAttributedType) @@ -264,6 +275,11 @@ private void CreateObject(ClassDataContract classContract) } } + [DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields, typeof(DBNull))] + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2075:RequiresUnreferencedCode", + Justification = "The DynamicDependency attribute will ensure that DBNull.Value is preserved.")] + private static FieldInfo GetDBNullValueField() => Globals.TypeOfDBNull.GetField("Value")!; + private void InvokeOnDeserializing(ClassDataContract classContract) { Debug.Assert(_objectLocal != null); @@ -321,6 +337,7 @@ private bool InvokeFactoryMethod(ClassDataContract classContract, LocalBuilder? return false; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void ReadClass(ClassDataContract classContract) { if (classContract.HasExtensionData) @@ -345,6 +362,7 @@ private void ReadClass(ClassDataContract classContract) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void ReadMembers(ClassDataContract classContract, LocalBuilder? extensionDataLocal) { int memberCount = classContract.MemberNames!.Length; @@ -376,6 +394,7 @@ private void ReadMembers(ClassDataContract classContract, LocalBuilder? extensio } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private int ReadMembers(ClassDataContract classContract, bool[] requiredMembers, Label[] memberLabels, LocalBuilder memberIndexLocal, LocalBuilder? requiredIndexLocal) { Debug.Assert(_objectLocal != null); @@ -448,6 +467,7 @@ private int GetRequiredMembers(ClassDataContract contract, bool[] requiredMember return memberCount; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void ReadISerializable(ClassDataContract classContract) { Debug.Assert(_objectLocal != null); @@ -462,6 +482,7 @@ private void ReadISerializable(ClassDataContract classContract) _ilg.Call(ctor); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private LocalBuilder ReadValue(Type type, string name, string ns) { LocalBuilder value = _ilg.DeclareLocal(type, "valueRead"); @@ -552,6 +573,7 @@ private LocalBuilder ReadValue(Type type, string name, string ns) return value; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void InternalDeserialize(LocalBuilder value, Type type, string name, string ns) { _ilg.Load(_contextArg); @@ -567,6 +589,7 @@ private void InternalDeserialize(LocalBuilder value, Type type, string name, str _ilg.Stloc(value); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void WrapNullableObject(LocalBuilder innerValue, LocalBuilder outerValue, int nullables) { Type innerType = innerValue.LocalType, outerType = outerValue.LocalType; @@ -582,6 +605,7 @@ private void WrapNullableObject(LocalBuilder innerValue, LocalBuilder outerValue } [MemberNotNull(nameof(_objectLocal))] + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void ReadCollection(CollectionDataContract collectionContract) { Type type = collectionContract.UnderlyingType; @@ -722,6 +746,7 @@ private void ReadCollection(CollectionDataContract collectionContract) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void ReadGetOnlyCollection(CollectionDataContract collectionContract) { Type type = collectionContract.UnderlyingType; @@ -784,6 +809,7 @@ private void ReadGetOnlyCollection(CollectionDataContract collectionContract) _ilg.EndIf(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private bool TryReadPrimitiveArray(Type type, Type itemType, LocalBuilder size) { Debug.Assert(_objectLocal != null); @@ -833,6 +859,7 @@ private bool TryReadPrimitiveArray(Type type, Type itemType, LocalBuilder size) return false; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private LocalBuilder ReadCollectionItem(CollectionDataContract collectionContract, Type itemType, string itemName, string itemNs) { if (collectionContract.Kind == CollectionKind.Dictionary || collectionContract.Kind == CollectionKind.GenericDictionary) @@ -854,6 +881,7 @@ private LocalBuilder ReadCollectionItem(CollectionDataContract collectionContrac } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void StoreCollectionValue(LocalBuilder collection, LocalBuilder value, CollectionDataContract collectionContract) { Debug.Assert(collectionContract.AddMethod != null); @@ -940,7 +968,9 @@ private void ThrowValidationException() } } - internal static object UnsafeGetUninitializedObject(Type type) + internal static object UnsafeGetUninitializedObject( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)] + Type type) { return RuntimeHelpers.GetUninitializedObject(type); } @@ -950,6 +980,7 @@ internal static object UnsafeGetUninitializedObject(Type type) /// Safe - marked as such so that it's callable from transparent generated IL. Takes id as parameter which /// is guaranteed to be in internal serialization cache. /// + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static object UnsafeGetUninitializedObject(int id) { var type = DataContract.GetDataContractForInitialization(id).TypeForInitialization; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatWriterGenerator.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatWriterGenerator.cs index 53895dab0532d9..dfb908cc041c06 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatWriterGenerator.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatWriterGenerator.cs @@ -12,6 +12,8 @@ using System.Security; using System.Runtime.CompilerServices; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { @@ -26,11 +28,13 @@ public XmlFormatWriterGenerator() _helper = new CriticalHelper(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal XmlFormatClassWriterDelegate GenerateClassWriter(ClassDataContract classContract) { return _helper.GenerateClassWriter(classContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal XmlFormatCollectionWriterDelegate GenerateCollectionWriter(CollectionDataContract collectionContract) { return _helper.GenerateCollectionWriter(collectionContract); @@ -56,11 +60,13 @@ private sealed class CriticalHelper private int _typeIndex = 1; private int _childElementIndex; + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private XmlFormatClassWriterDelegate CreateReflectionXmlFormatClassWriterDelegate() { return new ReflectionXmlFormatWriter().ReflectionWriteClass; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal XmlFormatClassWriterDelegate GenerateClassWriter(ClassDataContract classContract) { if (DataContractSerializer.Option == SerializationOption.ReflectionOnly) @@ -92,11 +98,13 @@ internal XmlFormatClassWriterDelegate GenerateClassWriter(ClassDataContract clas } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private XmlFormatCollectionWriterDelegate CreateReflectionXmlFormatCollectionWriterDelegate() { return new ReflectionXmlFormatWriter().ReflectionWriteCollection; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal XmlFormatCollectionWriterDelegate GenerateCollectionWriter(CollectionDataContract collectionContract) { if (DataContractSerializer.Option == SerializationOption.ReflectionOnly) @@ -128,6 +136,7 @@ internal XmlFormatCollectionWriterDelegate GenerateCollectionWriter(CollectionDa } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void InitArgs(Type objType) { _xmlWriterArg = _ilg.GetArg(0); @@ -188,6 +197,7 @@ private void InvokeOnSerialized(ClassDataContract classContract) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void WriteClass(ClassDataContract classContract) { InvokeOnSerializing(classContract); @@ -240,6 +250,7 @@ private void WriteClass(ClassDataContract classContract) InvokeOnSerialized(classContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private int WriteMembers(ClassDataContract classContract, LocalBuilder? extensionDataLocal, ClassDataContract derivedMostClassContract) { int memberCount = (classContract.BaseContract == null) ? 0 : @@ -323,6 +334,7 @@ private LocalBuilder LoadMemberValue(DataMember member) return memberValue; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void WriteCollection(CollectionDataContract collectionContract) { LocalBuilder itemNamespace = _ilg.DeclareLocal(typeof(XmlDictionaryString), "itemNamespace"); @@ -491,6 +503,7 @@ private void WriteCollection(CollectionDataContract collectionContract) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private bool TryWritePrimitive(Type type, LocalBuilder? value, MemberInfo? memberInfo, LocalBuilder? arrayItemIndex, LocalBuilder ns, LocalBuilder? name, int nameIndex) { PrimitiveDataContract? primitiveContract = PrimitiveDataContract.GetPrimitiveDataContract(type); @@ -537,6 +550,7 @@ private bool TryWritePrimitive(Type type, LocalBuilder? value, MemberInfo? membe return true; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private bool TryWritePrimitiveArray(Type type, Type itemType, LocalBuilder value, LocalBuilder itemName, LocalBuilder itemNamespace) { PrimitiveDataContract? primitiveContract = PrimitiveDataContract.GetPrimitiveDataContract(itemType); @@ -582,6 +596,7 @@ private bool TryWritePrimitiveArray(Type type, Type itemType, LocalBuilder value return false; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void WriteValue(LocalBuilder memberValue, bool writeXsiType) { Type memberType = memberValue.LocalType; @@ -665,6 +680,7 @@ private void InternalSerialize(MethodInfo methodInfo, LocalBuilder memberValue, } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private LocalBuilder UnwrapNullableObject(LocalBuilder memberValue)// Leaves !HasValue on stack { Type memberType = memberValue.LocalType; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializer.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializer.cs index 4d452bf64dc576..b10a70b1653fdf 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializer.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializer.cs @@ -12,13 +12,19 @@ namespace System.Runtime.Serialization using System.Text; using System.Security; using DataContractDictionary = System.Collections.Generic.Dictionary; + using System.Diagnostics.CodeAnalysis; + using System.Runtime.Serialization.Json; public abstract class XmlObjectSerializer { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public abstract void WriteStartObject(XmlDictionaryWriter writer, object? graph); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public abstract void WriteObjectContent(XmlDictionaryWriter writer, object? graph); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public abstract void WriteEndObject(XmlDictionaryWriter writer); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public virtual void WriteObject(Stream stream, object? graph) { CheckNull(stream, nameof(stream)); @@ -27,40 +33,47 @@ public virtual void WriteObject(Stream stream, object? graph) writer.Flush(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public virtual void WriteObject(XmlWriter writer, object? graph) { CheckNull(writer, nameof(writer)); WriteObject(XmlDictionaryWriter.CreateDictionaryWriter(writer), graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public virtual void WriteStartObject(XmlWriter writer, object? graph) { CheckNull(writer, nameof(writer)); WriteStartObject(XmlDictionaryWriter.CreateDictionaryWriter(writer), graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public virtual void WriteObjectContent(XmlWriter writer, object? graph) { CheckNull(writer, nameof(writer)); WriteObjectContent(XmlDictionaryWriter.CreateDictionaryWriter(writer), graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public virtual void WriteEndObject(XmlWriter writer) { CheckNull(writer, nameof(writer)); WriteEndObject(XmlDictionaryWriter.CreateDictionaryWriter(writer)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public virtual void WriteObject(XmlDictionaryWriter writer, object? graph) { WriteObjectHandleExceptions(new XmlWriterDelegator(writer), graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void WriteObjectHandleExceptions(XmlWriterDelegator writer, object? graph) { WriteObjectHandleExceptions(writer, graph, null); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void WriteObjectHandleExceptions(XmlWriterDelegator writer, object? graph, DataContractResolver? dataContractResolver) { try @@ -82,12 +95,14 @@ internal void WriteObjectHandleExceptions(XmlWriterDelegator writer, object? gra internal virtual DataContractDictionary? KnownDataContracts { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { return null; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual void InternalWriteObject(XmlWriterDelegator writer, object? graph) { WriteStartObject(writer.Writer, graph); @@ -95,27 +110,32 @@ internal virtual void InternalWriteObject(XmlWriterDelegator writer, object? gra WriteEndObject(writer.Writer); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual void InternalWriteObject(XmlWriterDelegator writer, object? graph, DataContractResolver? dataContractResolver) { InternalWriteObject(writer, graph); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual void InternalWriteStartObject(XmlWriterDelegator writer, object? graph) { DiagnosticUtility.DebugAssert("XmlObjectSerializer.InternalWriteStartObject should never get called"); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException()); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual void InternalWriteObjectContent(XmlWriterDelegator writer, object? graph) { DiagnosticUtility.DebugAssert("XmlObjectSerializer.InternalWriteObjectContent should never get called"); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException()); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual void InternalWriteEndObject(XmlWriterDelegator writer) { DiagnosticUtility.DebugAssert("XmlObjectSerializer.InternalWriteEndObject should never get called"); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException()); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void WriteStartObjectHandleExceptions(XmlWriterDelegator writer, object? graph) { try @@ -133,6 +153,7 @@ internal void WriteStartObjectHandleExceptions(XmlWriterDelegator writer, object } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void WriteObjectContentHandleExceptions(XmlWriterDelegator writer, object? graph) { try @@ -154,6 +175,7 @@ internal void WriteObjectContentHandleExceptions(XmlWriterDelegator writer, obje } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void WriteEndObjectHandleExceptions(XmlWriterDelegator writer) { try @@ -217,60 +239,72 @@ internal static bool IsContractDeclared(DataContract contract, DataContract decl || (contract.Name.Value == declaredContract.Name.Value && contract.Namespace.Value == declaredContract.Namespace.Value); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public virtual object? ReadObject(Stream stream) { CheckNull(stream, nameof(stream)); return ReadObject(XmlDictionaryReader.CreateTextReader(stream, XmlDictionaryReaderQuotas.Max)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public virtual object? ReadObject(XmlReader reader) { CheckNull(reader, nameof(reader)); return ReadObject(XmlDictionaryReader.CreateDictionaryReader(reader)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public virtual object? ReadObject(XmlDictionaryReader reader) { return ReadObjectHandleExceptions(new XmlReaderDelegator(reader), true /*verifyObjectName*/); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public virtual object? ReadObject(XmlReader reader, bool verifyObjectName) { CheckNull(reader, nameof(reader)); return ReadObject(XmlDictionaryReader.CreateDictionaryReader(reader), verifyObjectName); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public abstract object? ReadObject(XmlDictionaryReader reader, bool verifyObjectName); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public virtual bool IsStartObject(XmlReader reader) { CheckNull(reader, nameof(reader)); return IsStartObject(XmlDictionaryReader.CreateDictionaryReader(reader)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public abstract bool IsStartObject(XmlDictionaryReader reader); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual object? InternalReadObject(XmlReaderDelegator reader, bool verifyObjectName) { return ReadObject(reader.UnderlyingReader, verifyObjectName); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual object? InternalReadObject(XmlReaderDelegator reader, bool verifyObjectName, DataContractResolver? dataContractResolver) { return InternalReadObject(reader, verifyObjectName); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual bool InternalIsStartObject(XmlReaderDelegator reader) { DiagnosticUtility.DebugAssert("XmlObjectSerializer.InternalIsStartObject should never get called"); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException()); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal object? ReadObjectHandleExceptions(XmlReaderDelegator reader, bool verifyObjectName) { return ReadObjectHandleExceptions(reader, verifyObjectName, null); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal object? ReadObjectHandleExceptions(XmlReaderDelegator reader, bool verifyObjectName, DataContractResolver? dataContractResolver) { try @@ -288,6 +322,7 @@ internal virtual bool InternalIsStartObject(XmlReaderDelegator reader) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal bool IsStartObjectHandleExceptions(XmlReaderDelegator reader) { try @@ -315,6 +350,7 @@ internal bool IsStartElement(XmlReaderDelegator reader) return (reader.MoveToElement() || reader.IsStartElement()); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal bool IsRootElement(XmlReaderDelegator reader, DataContract contract, XmlDictionaryString? name, XmlDictionaryString? ns) { reader.MoveToElement(); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerContext.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerContext.cs index 765f02b378b7b7..9f81a2b0658070 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerContext.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerContext.cs @@ -6,7 +6,9 @@ namespace System.Runtime.Serialization using System; using System.Collections.Generic; using System.Diagnostics; + using System.Diagnostics.CodeAnalysis; using System.Reflection; + using System.Runtime.Serialization.Json; using System.Security; using System.Xml; using DataContractDictionary = System.Collections.Generic.Dictionary; @@ -106,11 +108,13 @@ protected KnownTypeDataContractResolver KnownTypeResolver } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal DataContract GetDataContract(Type type) { return GetDataContract(type.TypeHandle, type); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual DataContract GetDataContract(RuntimeTypeHandle typeHandle, Type? type) { if (IsGetOnlyCollection) @@ -123,6 +127,7 @@ internal virtual DataContract GetDataContract(RuntimeTypeHandle typeHandle, Type } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual DataContract GetDataContractSkipValidation(int typeId, RuntimeTypeHandle typeHandle, Type? type) { if (IsGetOnlyCollection) @@ -135,7 +140,7 @@ internal virtual DataContract GetDataContractSkipValidation(int typeId, RuntimeT } } - + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual DataContract GetDataContract(int id, RuntimeTypeHandle typeHandle) { if (IsGetOnlyCollection) @@ -148,18 +153,21 @@ internal virtual DataContract GetDataContract(int id, RuntimeTypeHandle typeHand } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual void CheckIfTypeSerializable(Type memberType, bool isMemberTypeSerializable) { if (!isMemberTypeSerializable) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.TypeNotSerializable, memberType))); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual Type GetSurrogatedType(Type type) { return type; } internal virtual DataContractDictionary? SerializerKnownDataContracts { + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { // This field must be initialized during construction by serializers using data contracts. @@ -172,6 +180,7 @@ internal virtual DataContractDictionary? SerializerKnownDataContracts } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private DataContract? GetDataContractFromSerializerKnownTypes(XmlQualifiedName qname) { DataContractDictionary? serializerKnownDataContracts = this.SerializerKnownDataContracts; @@ -181,6 +190,7 @@ internal virtual DataContractDictionary? SerializerKnownDataContracts return serializerKnownDataContracts.TryGetValue(qname, out outDataContract) ? outDataContract : null; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static DataContractDictionary? GetDataContractsForKnownTypes(IList knownTypeList) { if (knownTypeList == null) return null; @@ -197,6 +207,7 @@ internal virtual DataContractDictionary? SerializerKnownDataContracts return dataContracts; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal bool IsKnownType(DataContract dataContract, DataContractDictionary? knownDataContracts, Type? declaredType) { bool knownTypesAddedInCurrentScope = false; @@ -215,18 +226,21 @@ internal bool IsKnownType(DataContract dataContract, DataContractDictionary? kno return isKnownType; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal bool IsKnownType(DataContract dataContract, Type? declaredType) { DataContract? knownContract = ResolveDataContractFromKnownTypes(dataContract.StableName.Name, dataContract.StableName.Namespace, null /*memberTypeContract*/, declaredType); return knownContract != null && knownContract.UnderlyingType == dataContract.UnderlyingType; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal Type? ResolveNameFromKnownTypes(XmlQualifiedName typeName) { DataContract? dataContract = ResolveDataContractFromKnownTypes(typeName); return dataContract == null ? null : dataContract.UnderlyingType; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private DataContract? ResolveDataContractFromKnownTypes(XmlQualifiedName typeName) { DataContract? dataContract = PrimitiveDataContract.GetPrimitiveDataContract(typeName.Name, typeName.Namespace); @@ -241,6 +255,7 @@ internal bool IsKnownType(DataContract dataContract, Type? declaredType) return dataContract; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected DataContract? ResolveDataContractFromKnownTypes(string typeName, string? typeNs, DataContract? memberTypeContract, Type? declaredType) { XmlQualifiedName qname = new XmlQualifiedName(typeName, typeNs); @@ -285,6 +300,7 @@ internal bool IsKnownType(DataContract dataContract, Type? declaredType) return dataContract; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void PushKnownTypes(DataContract dc) { if (dc != null && dc.KnownDataContracts != null) @@ -293,6 +309,7 @@ internal void PushKnownTypes(DataContract dc) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void PopKnownTypes(DataContract dc) { if (dc != null && dc.KnownDataContracts != null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContext.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContext.cs index e29728f553c0bf..37530adc744dc7 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContext.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContext.cs @@ -13,6 +13,7 @@ namespace System.Runtime.Serialization using System.Security; using DataContractDictionary = System.Collections.Generic.Dictionary; using System.Diagnostics.CodeAnalysis; + using System.Runtime.Serialization.Json; internal class XmlObjectSerializerReadContext : XmlObjectSerializerContext { @@ -90,19 +91,21 @@ internal XmlObjectSerializerReadContext(DataContractSerializer serializer, DataC this.attributes = new Attributes(); } - + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual object? InternalDeserialize(XmlReaderDelegator xmlReader, int id, RuntimeTypeHandle declaredTypeHandle, string name, string ns) { DataContract dataContract = GetDataContract(id, declaredTypeHandle); return InternalDeserialize(xmlReader, name, ns, Type.GetTypeFromHandle(declaredTypeHandle), ref dataContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual object? InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, string name, string ns) { DataContract dataContract = GetDataContract(declaredType); return InternalDeserialize(xmlReader, name, ns, declaredType, ref dataContract); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual object? InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, DataContract? dataContract, string? name, string? ns) { if (dataContract == null) @@ -135,6 +138,7 @@ protected bool TryHandleNullOrRef(XmlReaderDelegator reader, Type declaredType, return false; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected object? InternalDeserialize(XmlReaderDelegator reader, string? name, string? ns, Type declaredType, ref DataContract dataContract) { object? retObj = null; @@ -214,6 +218,7 @@ internal static bool MoveToNextElement(XmlReaderDelegator xmlReader) return (xmlReader.MoveToContent() != XmlNodeType.EndElement); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal int GetMemberIndex(XmlReaderDelegator xmlReader, XmlDictionaryString[] memberNames, XmlDictionaryString[] memberNamespaces, int memberIndex, ExtensionDataObject? extensionData) { for (int i = memberIndex + 1; i < memberNames.Length; i++) @@ -225,6 +230,7 @@ internal int GetMemberIndex(XmlReaderDelegator xmlReader, XmlDictionaryString[] return memberNames.Length; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal int GetMemberIndexWithRequiredMembers(XmlReaderDelegator xmlReader, XmlDictionaryString[] memberNames, XmlDictionaryString[] memberNamespaces, int memberIndex, int requiredIndex, ExtensionDataObject? extensionData) { for (int i = memberIndex + 1; i < memberNames.Length; i++) @@ -255,6 +261,7 @@ internal static void ThrowRequiredMemberMissingException(XmlReaderDelegator xmlR throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(XmlObjectSerializer.TryAddLineInfo(xmlReader, SR.Format(SR.UnexpectedElementExpectingElements, xmlReader.NodeType, xmlReader.LocalName, xmlReader.NamespaceURI, stringBuilder.ToString())))); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected void HandleMemberNotFound(XmlReaderDelegator xmlReader, ExtensionDataObject? extensionData, int memberIndex) { xmlReader.MoveToContent(); @@ -267,6 +274,7 @@ protected void HandleMemberNotFound(XmlReaderDelegator xmlReader, ExtensionDataO HandleUnknownElement(xmlReader, extensionData, memberIndex); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void HandleUnknownElement(XmlReaderDelegator xmlReader, ExtensionDataObject extensionData, int memberIndex) { if (extensionData.Members == null) @@ -280,6 +288,7 @@ internal void SkipUnknownElement(XmlReaderDelegator xmlReader) xmlReader.Skip(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal string ReadIfNullOrRef(XmlReaderDelegator xmlReader, Type memberType, bool isMemberTypeSerializable) { Debug.Assert(attributes != null); @@ -457,6 +466,7 @@ internal void CheckEndOfArray(XmlReaderDelegator xmlReader, int arraySize, XmlDi throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateUnexpectedStateException(XmlNodeType.EndElement, xmlReader)); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal object? ReadIXmlSerializable(XmlReaderDelegator xmlReader, XmlDataContract xmlDataContract, bool isMemberType) { if (_xmlSerializableReader == null) @@ -464,11 +474,13 @@ internal void CheckEndOfArray(XmlReaderDelegator xmlReader, int arraySize, XmlDi return ReadIXmlSerializable(_xmlSerializableReader, xmlReader, xmlDataContract, isMemberType); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static object? ReadRootIXmlSerializable(XmlReaderDelegator xmlReader, XmlDataContract xmlDataContract, bool isMemberType) { return ReadIXmlSerializable(new XmlSerializableReader(), xmlReader, xmlDataContract, isMemberType); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal static object? ReadIXmlSerializable(XmlSerializableReader xmlSerializableReader, XmlReaderDelegator xmlReader, XmlDataContract xmlDataContract, bool isMemberType) { object? obj = null; @@ -499,6 +511,7 @@ internal void CheckEndOfArray(XmlReaderDelegator xmlReader, int arraySize, XmlDi return obj; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public SerializationInfo ReadSerializationInfo(XmlReaderDelegator xmlReader, Type type) { var serInfo = new SerializationInfo(type, XmlObjectSerializer.FormatterConverter); @@ -542,6 +555,7 @@ public SerializationInfo ReadSerializationInfo(XmlReaderDelegator xmlReader, Typ return serInfo; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected virtual DataContract? ResolveDataContractFromTypeName() { Debug.Assert(attributes != null); @@ -549,6 +563,7 @@ public SerializationInfo ReadSerializationInfo(XmlReaderDelegator xmlReader, Typ return (attributes.XsiTypeName == null) ? null : ResolveDataContractFromKnownTypes(attributes.XsiTypeName, attributes.XsiTypeNamespace, null /*memberTypeContract*/, null); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private ExtensionDataMember ReadExtensionDataMember(XmlReaderDelegator xmlReader, int memberIndex) { var member = new ExtensionDataMember(xmlReader.LocalName, xmlReader.NamespaceURI) @@ -560,6 +575,7 @@ private ExtensionDataMember ReadExtensionDataMember(XmlReaderDelegator xmlReader return member; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public IDataNode? ReadExtensionDataValue(XmlReaderDelegator xmlReader) { ReadAttributes(xmlReader); @@ -657,6 +673,7 @@ protected virtual void StartReadExtensionDataValue(XmlReaderDelegator xmlReader) { } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private IDataNode ReadExtensionDataValue(XmlReaderDelegator xmlReader, string? dataContractName, string? dataContractNamespace) { Debug.Assert(attributes != null); @@ -730,6 +747,7 @@ private IDataNode ReadUnknownPrimitiveData(XmlReaderDelegator xmlReader, Type ty return dataNode; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private ClassDataNode ReadUnknownClassData(XmlReaderDelegator xmlReader, string? dataContractName, string? dataContractNamespace) { var dataNode = new ClassDataNode(); @@ -750,6 +768,7 @@ private ClassDataNode ReadUnknownClassData(XmlReaderDelegator xmlReader, string? return dataNode; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private CollectionDataNode ReadUnknownCollectionData(XmlReaderDelegator xmlReader, string? dataContractName, string? dataContractNamespace) { Debug.Assert(attributes != null); @@ -806,6 +825,7 @@ private CollectionDataNode ReadUnknownCollectionData(XmlReaderDelegator xmlReade return dataNode; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private ISerializableDataNode ReadUnknownISerializableData(XmlReaderDelegator xmlReader, string? dataContractName, string? dataContractNamespace) { Debug.Assert(attributes != null); @@ -886,6 +906,7 @@ private IDataNode ReadUnknownXmlData(XmlReaderDelegator xmlReader, string? dataC // all items have the same name and namespace. To recognize as an ISerializable type, it requires that all // items be unqualified. If the XML only contains elements (no attributes or other nodes) is recognized as a // class/class hierarchy. Otherwise it is deserialized as XML. + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private IDataNode ReadAndResolveUnknownXmlData(XmlReaderDelegator xmlReader, IDictionary? namespaces, string? dataContractName, string? dataContractNamespace) { @@ -1029,6 +1050,7 @@ internal static Exception CreateSerializationException(string message) return XmlObjectSerializer.CreateSerializationException(message); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected virtual object? ReadDataContractValue(DataContract dataContract, XmlReaderDelegator reader) { return dataContract.ReadXmlValue(reader, this); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs index 60d6d370f5d155..12940ddcc0ff05 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs @@ -2,7 +2,9 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Reflection; +using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { @@ -30,6 +32,7 @@ internal override SerializationMode Mode get { return _mode; } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override object? InternalDeserialize(XmlReaderDelegator xmlReader, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle, string name, string ns) { if (_mode == SerializationMode.SharedContract) @@ -45,6 +48,7 @@ internal override SerializationMode Mode } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override object? InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, string name, string ns) { if (_mode == SerializationMode.SharedContract) @@ -60,6 +64,7 @@ internal override SerializationMode Mode } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override object? InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, DataContract? dataContract, string? name, string? ns) { if (_mode == SerializationMode.SharedContract) @@ -75,6 +80,7 @@ internal override SerializationMode Mode } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private object? InternalDeserializeInSharedTypeMode(XmlReaderDelegator xmlReader, int declaredTypeID, Type declaredType, string? name, string? ns) { Debug.Assert(attributes != null); @@ -117,6 +123,7 @@ internal override SerializationMode Mode return ReadDataContractValue(dataContract, xmlReader); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private object? InternalDeserializeWithSurrogate(XmlReaderDelegator xmlReader, Type declaredType, DataContract? surrogateDataContract, string? name, string? ns) { Debug.Assert(_serializationSurrogateProvider != null); @@ -143,6 +150,7 @@ private Type ResolveDataContractTypeInSharedTypeMode(string assemblyName, string throw new PlatformNotSupportedException(SR.PlatformNotSupported_NetDataContractSerializer); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private DataContract? ResolveDataContractInSharedTypeMode(string assemblyName, string typeName, out Assembly assembly, out Type type) { type = ResolveDataContractTypeInSharedTypeMode(assemblyName, typeName, out assembly); @@ -154,6 +162,7 @@ private Type ResolveDataContractTypeInSharedTypeMode(string assemblyName, string return null; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected override DataContract? ResolveDataContractFromTypeName() { Debug.Assert(attributes != null); @@ -174,6 +183,7 @@ private Type ResolveDataContractTypeInSharedTypeMode(string assemblyName, string return null; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override void CheckIfTypeSerializable(Type memberType, bool isMemberTypeSerializable) { if (_serializationSurrogateProvider != null) @@ -189,6 +199,7 @@ internal override void CheckIfTypeSerializable(Type memberType, bool isMemberTyp base.CheckIfTypeSerializable(memberType, isMemberTypeSerializable); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override Type GetSurrogatedType(Type type) { if (_serializationSurrogateProvider == null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs index 76cc63f22c2e7a..9f62c0ba158219 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs @@ -15,6 +15,7 @@ using System.Runtime.CompilerServices; using ExtensionDataObject = System.Object; using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { @@ -87,6 +88,7 @@ internal void ResetIsGetOnlyCollection() _isGetOnlyCollection = false; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void InternalSerializeReference(XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle) { if (!OnHandleReference(xmlWriter, obj, true /*canContainCyclicReference*/)) @@ -94,6 +96,7 @@ internal void InternalSerializeReference(XmlWriterDelegator xmlWriter, object ob OnEndHandleReference(xmlWriter, obj, true /*canContainCyclicReference*/); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual void InternalSerialize(XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle) { if (writeXsiType) @@ -123,6 +126,7 @@ internal virtual void InternalSerialize(XmlWriterDelegator xmlWriter, object obj } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void SerializeWithoutXsiType(DataContract dataContract, XmlWriterDelegator xmlWriter, object obj, RuntimeTypeHandle declaredTypeHandle) { if (OnHandleIsReference(xmlWriter, dataContract, obj)) @@ -139,6 +143,7 @@ internal void SerializeWithoutXsiType(DataContract dataContract, XmlWriterDelega } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual void SerializeWithXsiTypeAtTopLevel(DataContract dataContract, XmlWriterDelegator xmlWriter, object obj, RuntimeTypeHandle originalDeclaredTypeHandle, Type graphType) { Debug.Assert(rootTypeDataContract != null); @@ -160,6 +165,7 @@ internal virtual void SerializeWithXsiTypeAtTopLevel(DataContract dataContract, SerializeAndVerifyType(dataContract, xmlWriter, obj, verifyKnownType, originalDeclaredTypeHandle, declaredType); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected virtual void SerializeWithXsiType(XmlWriterDelegator xmlWriter, object obj, RuntimeTypeHandle objectTypeHandle, Type? objectType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle, Type declaredType) { bool verifyKnownType = false; @@ -226,6 +232,7 @@ internal bool OnHandleIsReference(XmlWriterDelegator xmlWriter, DataContract con } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected void SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, object obj, bool verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType) { bool knownTypesAddedInCurrentScope = false; @@ -285,6 +292,7 @@ internal virtual void WriteString(XmlWriterDelegator xmlWriter, string value) xmlWriter.WriteString(value); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual void WriteString(XmlWriterDelegator xmlWriter, string? value, XmlDictionaryString name, XmlDictionaryString? ns) { if (value == null) @@ -302,6 +310,7 @@ internal virtual void WriteBase64(XmlWriterDelegator xmlWriter, byte[] value) xmlWriter.WriteBase64(value); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual void WriteBase64(XmlWriterDelegator xmlWriter, byte[] value, XmlDictionaryString name, XmlDictionaryString ns) { if (value == null) @@ -319,6 +328,7 @@ internal virtual void WriteUri(XmlWriterDelegator xmlWriter, Uri value) xmlWriter.WriteUri(value); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual void WriteUri(XmlWriterDelegator xmlWriter, Uri value, XmlDictionaryString name, XmlDictionaryString ns) { if (value == null) @@ -336,6 +346,7 @@ internal virtual void WriteQName(XmlWriterDelegator xmlWriter, XmlQualifiedName xmlWriter.WriteQName(value); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual void WriteQName(XmlWriterDelegator xmlWriter, XmlQualifiedName? value, XmlDictionaryString name, XmlDictionaryString? ns) { if (value == null) @@ -385,12 +396,14 @@ internal virtual void OnEndHandleReference(XmlWriterDelegator xmlWriter, object } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void WriteNull(XmlWriterDelegator xmlWriter, Type memberType, bool isMemberTypeSerializable) { CheckIfTypeSerializable(memberType, isMemberTypeSerializable); WriteNull(xmlWriter); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void WriteNull(XmlWriterDelegator xmlWriter, Type memberType, bool isMemberTypeSerializable, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteStartElement(name, ns); @@ -494,6 +507,7 @@ internal void GetObjectData(ISerializable obj, SerializationInfo serInfo, Stream obj.GetObjectData(serInfo, context); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public void WriteISerializable(XmlWriterDelegator xmlWriter, ISerializable obj) { Type objType = obj.GetType(); @@ -509,6 +523,7 @@ public void WriteISerializable(XmlWriterDelegator xmlWriter, ISerializable obj) WriteSerializationInfo(xmlWriter, objType, serInfo); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void WriteSerializationInfo(XmlWriterDelegator xmlWriter, Type objType, SerializationInfo serInfo) { if (DataContract.GetClrTypeFullName(objType) != serInfo.FullTypeName) @@ -549,6 +564,7 @@ internal void WriteSerializationInfo(XmlWriterDelegator xmlWriter, Type objType, } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected virtual void WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, object obj, RuntimeTypeHandle declaredTypeHandle) { dataContract.WriteXmlValue(xmlWriter, obj, this); @@ -559,6 +575,7 @@ protected virtual void WriteNull(XmlWriterDelegator xmlWriter) XmlObjectSerializer.WriteNull(xmlWriter); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void WriteResolvedTypeInfo(XmlWriterDelegator writer, Type objectType, Type declaredType) { XmlDictionaryString? typeName, typeNamespace; @@ -568,6 +585,7 @@ private void WriteResolvedTypeInfo(XmlWriterDelegator writer, Type objectType, T } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private bool ResolveType(Type objectType, Type declaredType, [NotNullWhen(true)] out XmlDictionaryString? typeName, [NotNullWhen(true)] out XmlDictionaryString? typeNamespace) { Debug.Assert(DataContractResolver != null); @@ -594,6 +612,7 @@ private bool ResolveType(Type objectType, Type declaredType, [NotNullWhen(true)] return true; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected virtual bool WriteTypeInfo(XmlWriterDelegator writer, DataContract contract, DataContract declaredContract) { if (!XmlObjectSerializer.IsContractDeclared(contract, declaredContract)) @@ -622,6 +641,7 @@ protected virtual void WriteTypeInfo(XmlWriterDelegator writer, XmlDictionaryStr writer.WriteAttributeQualifiedName(Globals.XsiPrefix, DictionaryGlobals.XsiTypeLocalName, DictionaryGlobals.SchemaInstanceNamespace, dataContractName, dataContractNamespace); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public void WriteExtensionData(XmlWriterDelegator xmlWriter, ExtensionDataObject? extensionData, int memberIndex) { if (IgnoreExtensionDataObject || extensionData == null) @@ -641,6 +661,7 @@ public void WriteExtensionData(XmlWriterDelegator xmlWriter, ExtensionDataObject } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void WriteExtensionDataMember(XmlWriterDelegator xmlWriter, ExtensionDataMember member) { xmlWriter.WriteStartElement(member.Name, member.Namespace); @@ -649,6 +670,7 @@ private void WriteExtensionDataMember(XmlWriterDelegator xmlWriter, ExtensionDat xmlWriter.WriteEndElement(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal virtual void WriteExtensionDataTypeInfo(XmlWriterDelegator xmlWriter, IDataNode dataNode) { if (dataNode.DataContractName != null) @@ -657,6 +679,7 @@ internal virtual void WriteExtensionDataTypeInfo(XmlWriterDelegator xmlWriter, I WriteClrTypeInfo(xmlWriter, dataNode.DataType, dataNode.ClrTypeName, dataNode.ClrAssemblyName); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void WriteExtensionDataValue(XmlWriterDelegator xmlWriter, IDataNode? dataNode) { IncrementItemCount(1); @@ -698,6 +721,7 @@ internal void WriteExtensionDataValue(XmlWriterDelegator xmlWriter, IDataNode? d OnEndHandleReference(xmlWriter, (dataNode.Value == null ? dataNode : dataNode.Value), true /*canContainCyclicReference*/); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal bool TryWriteDeserializedExtensionData(XmlWriterDelegator xmlWriter, IDataNode dataNode) { object? o = dataNode.Value; @@ -709,6 +733,7 @@ internal bool TryWriteDeserializedExtensionData(XmlWriterDelegator xmlWriter, ID return true; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void WriteExtensionClassData(XmlWriterDelegator xmlWriter, ClassDataNode dataNode) { if (!TryWriteDeserializedExtensionData(xmlWriter, dataNode)) @@ -726,6 +751,7 @@ private void WriteExtensionClassData(XmlWriterDelegator xmlWriter, ClassDataNode } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void WriteExtensionCollectionData(XmlWriterDelegator xmlWriter, CollectionDataNode dataNode) { if (!TryWriteDeserializedExtensionData(xmlWriter, dataNode)) @@ -747,6 +773,7 @@ private void WriteExtensionCollectionData(XmlWriterDelegator xmlWriter, Collecti } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void WriteExtensionISerializableData(XmlWriterDelegator xmlWriter, ISerializableDataNode dataNode) { if (!TryWriteDeserializedExtensionData(xmlWriter, dataNode)) @@ -770,6 +797,7 @@ private void WriteExtensionISerializableData(XmlWriterDelegator xmlWriter, ISeri } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void WriteExtensionXmlData(XmlWriterDelegator xmlWriter, XmlDataNode dataNode) { if (!TryWriteDeserializedExtensionData(xmlWriter, dataNode)) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContextComplex.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContextComplex.cs index be3223aa661337..5f092d5e79c9e2 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContextComplex.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContextComplex.cs @@ -12,6 +12,8 @@ using System.Collections.Generic; using System.Security; using System.Runtime.CompilerServices; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { @@ -60,6 +62,7 @@ internal override void WriteString(XmlWriterDelegator xmlWriter, string value) xmlWriter.WriteString(value); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override void WriteString(XmlWriterDelegator xmlWriter, string? value, XmlDictionaryString name, XmlDictionaryString? ns) { if (value == null) @@ -79,6 +82,7 @@ internal override void WriteBase64(XmlWriterDelegator xmlWriter, byte[] value) xmlWriter.WriteBase64(value); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override void WriteBase64(XmlWriterDelegator xmlWriter, byte[] value, XmlDictionaryString name, XmlDictionaryString ns) { if (value == null) @@ -98,6 +102,7 @@ internal override void WriteUri(XmlWriterDelegator xmlWriter, Uri value) xmlWriter.WriteUri(value); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override void WriteUri(XmlWriterDelegator xmlWriter, Uri value, XmlDictionaryString name, XmlDictionaryString ns) { if (value == null) @@ -117,6 +122,7 @@ internal override void WriteQName(XmlWriterDelegator xmlWriter, XmlQualifiedName xmlWriter.WriteQName(value); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override void WriteQName(XmlWriterDelegator xmlWriter, XmlQualifiedName? value, XmlDictionaryString name, XmlDictionaryString? ns) { if (value == null) @@ -133,6 +139,7 @@ internal override void WriteQName(XmlWriterDelegator xmlWriter, XmlQualifiedName } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override void InternalSerialize(XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle) { if (_serializationSurrogateProvider == null) @@ -170,6 +177,7 @@ internal override void OnEndHandleReference(XmlWriterDelegator xmlWriter, object base.OnEndHandleReference(xmlWriter, obj, canContainCyclicReference); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override void CheckIfTypeSerializable(Type memberType, bool isMemberTypeSerializable) { if (_serializationSurrogateProvider != null) @@ -185,6 +193,7 @@ internal override void CheckIfTypeSerializable(Type memberType, bool isMemberTyp base.CheckIfTypeSerializable(memberType, isMemberTypeSerializable); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal override Type GetSurrogatedType(Type type) { if (_serializationSurrogateProvider == null) @@ -207,6 +216,7 @@ internal override Type GetSurrogatedType(Type type) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void InternalSerializeWithSurrogate(XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle) { RuntimeTypeHandle objTypeHandle = isDeclaredType ? declaredTypeHandle : obj.GetType().TypeHandle; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XsdDataContractExporter.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XsdDataContractExporter.cs index 2ff80082ec9dce..7faea437f691e8 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XsdDataContractExporter.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XsdDataContractExporter.cs @@ -7,6 +7,8 @@ using System.Collections.ObjectModel; using System.Reflection; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { @@ -72,6 +74,7 @@ private void TraceExportError(Exception exception) { } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public void Export(ICollection assemblies) { if (assemblies == null) @@ -103,6 +106,7 @@ public void Export(ICollection assemblies) TraceExportEnd(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public void Export(ICollection types) { if (types == null) @@ -131,6 +135,7 @@ public void Export(ICollection types) TraceExportEnd(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public void Export(Type type) { if (type == null) @@ -153,6 +158,7 @@ public void Export(Type type) TraceExportEnd(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public XmlQualifiedName GetSchemaTypeName(Type type) { if (type == null) @@ -166,6 +172,7 @@ public XmlQualifiedName GetSchemaTypeName(Type type) return dataContract.StableName; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public XmlSchemaType? GetSchemaType(Type type) { if (type == null) @@ -179,6 +186,7 @@ public XmlQualifiedName GetSchemaTypeName(Type type) return null; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public XmlQualifiedName? GetRootElementName(Type type) { if (type == null) @@ -206,6 +214,7 @@ private Type GetSurrogatedType(Type type) return type; } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void CheckAndAddType(Type type) { type = GetSurrogatedType(type); @@ -213,11 +222,13 @@ private void CheckAndAddType(Type type) AddType(type); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void AddType(Type type) { DataContractSet.Add(type); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void Export() { AddKnownTypes(); @@ -225,6 +236,7 @@ private void Export() schemaExporter.Export(); } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void AddKnownTypes() { if (Options != null) @@ -244,6 +256,7 @@ private void AddKnownTypes() } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public bool CanExport(ICollection assemblies) { if (assemblies == null) @@ -277,6 +290,7 @@ public bool CanExport(ICollection assemblies) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public bool CanExport(ICollection types) { if (types == null) @@ -307,6 +321,7 @@ public bool CanExport(ICollection types) } } + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] public bool CanExport(Type type) { if (type == null) diff --git a/src/libraries/System.Runtime.Serialization.Json/ref/System.Runtime.Serialization.Json.cs b/src/libraries/System.Runtime.Serialization.Json/ref/System.Runtime.Serialization.Json.cs index 6781f4925fba07..014c498f6eace0 100644 --- a/src/libraries/System.Runtime.Serialization.Json/ref/System.Runtime.Serialization.Json.cs +++ b/src/libraries/System.Runtime.Serialization.Json/ref/System.Runtime.Serialization.Json.cs @@ -25,19 +25,19 @@ namespace System.Runtime.Serialization.Json { public sealed partial class DataContractJsonSerializer : System.Runtime.Serialization.XmlObjectSerializer { - [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Json Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public DataContractJsonSerializer(System.Type type) { } - [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Json Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public DataContractJsonSerializer(System.Type type, System.Collections.Generic.IEnumerable? knownTypes) { } - [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Json Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public DataContractJsonSerializer(System.Type type, System.Runtime.Serialization.Json.DataContractJsonSerializerSettings? settings) { } - [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Json Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public DataContractJsonSerializer(System.Type type, string? rootName) { } - [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Json Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public DataContractJsonSerializer(System.Type type, string? rootName, System.Collections.Generic.IEnumerable? knownTypes) { } - [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Json Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public DataContractJsonSerializer(System.Type type, System.Xml.XmlDictionaryString? rootName) { } - [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Json Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public DataContractJsonSerializer(System.Type type, System.Xml.XmlDictionaryString? rootName, System.Collections.Generic.IEnumerable? knownTypes) { } public System.Runtime.Serialization.DateTimeFormat? DateTimeFormat { get { throw null; } } public System.Runtime.Serialization.EmitTypeInformation EmitTypeInformation { get { throw null; } } @@ -46,21 +46,37 @@ public DataContractJsonSerializer(System.Type type, System.Xml.XmlDictionaryStri public int MaxItemsInObjectGraph { get { throw null; } } public bool SerializeReadOnlyTypes { get { throw null; } } public bool UseSimpleDictionaryFormat { get { throw null; } } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override bool IsStartObject(System.Xml.XmlDictionaryReader reader) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override bool IsStartObject(System.Xml.XmlReader reader) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override object? ReadObject(System.IO.Stream stream) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override object? ReadObject(System.Xml.XmlDictionaryReader reader) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override object? ReadObject(System.Xml.XmlDictionaryReader reader, bool verifyObjectName) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override object? ReadObject(System.Xml.XmlReader reader) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override object? ReadObject(System.Xml.XmlReader reader, bool verifyObjectName) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override void WriteEndObject(System.Xml.XmlDictionaryWriter writer) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override void WriteEndObject(System.Xml.XmlWriter writer) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override void WriteObject(System.IO.Stream stream, object? graph) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override void WriteObject(System.Xml.XmlDictionaryWriter writer, object? graph) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override void WriteObject(System.Xml.XmlWriter writer, object? graph) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override void WriteObjectContent(System.Xml.XmlDictionaryWriter writer, object? graph) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override void WriteObjectContent(System.Xml.XmlWriter writer, object? graph) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override void WriteStartObject(System.Xml.XmlDictionaryWriter writer, object? graph) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override void WriteStartObject(System.Xml.XmlWriter writer, object? graph) { } } public partial class DataContractJsonSerializerSettings diff --git a/src/libraries/System.Runtime.Serialization.Xml/ref/System.Runtime.Serialization.Xml.cs b/src/libraries/System.Runtime.Serialization.Xml/ref/System.Runtime.Serialization.Xml.cs index 4c16924a5e8271..6a3d406d810269 100644 --- a/src/libraries/System.Runtime.Serialization.Xml/ref/System.Runtime.Serialization.Xml.cs +++ b/src/libraries/System.Runtime.Serialization.Xml/ref/System.Runtime.Serialization.Xml.cs @@ -9,7 +9,9 @@ namespace System.Runtime.Serialization public abstract partial class DataContractResolver { protected DataContractResolver() { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public abstract System.Type? ResolveName(string typeName, string? typeNamespace, System.Type? declaredType, System.Runtime.Serialization.DataContractResolver knownTypeResolver); + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public abstract bool TryResolveType(System.Type type, System.Type? declaredType, System.Runtime.Serialization.DataContractResolver knownTypeResolver, out System.Xml.XmlDictionaryString? typeName, out System.Xml.XmlDictionaryString? typeNamespace); } public sealed partial class DataContractSerializer : System.Runtime.Serialization.XmlObjectSerializer @@ -27,19 +29,33 @@ public DataContractSerializer(System.Type type, System.Xml.XmlDictionaryString r public int MaxItemsInObjectGraph { get { throw null; } } public bool PreserveObjectReferences { get { throw null; } } public bool SerializeReadOnlyTypes { get { throw null; } } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override bool IsStartObject(System.Xml.XmlDictionaryReader reader) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override bool IsStartObject(System.Xml.XmlReader reader) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override object? ReadObject(System.Xml.XmlDictionaryReader reader, bool verifyObjectName) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public object? ReadObject(System.Xml.XmlDictionaryReader reader, bool verifyObjectName, System.Runtime.Serialization.DataContractResolver? dataContractResolver) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override object? ReadObject(System.Xml.XmlReader reader) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override object? ReadObject(System.Xml.XmlReader reader, bool verifyObjectName) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override void WriteEndObject(System.Xml.XmlDictionaryWriter writer) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override void WriteEndObject(System.Xml.XmlWriter writer) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public void WriteObject(System.Xml.XmlDictionaryWriter writer, object? graph, System.Runtime.Serialization.DataContractResolver? dataContractResolver) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override void WriteObject(System.Xml.XmlWriter writer, object? graph) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override void WriteObjectContent(System.Xml.XmlDictionaryWriter writer, object? graph) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override void WriteObjectContent(System.Xml.XmlWriter writer, object? graph) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override void WriteStartObject(System.Xml.XmlDictionaryWriter writer, object? graph) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public override void WriteStartObject(System.Xml.XmlWriter writer, object? graph) { } } public static partial class DataContractSerializerExtensions @@ -75,21 +91,37 @@ public partial interface IExtensibleDataObject public abstract partial class XmlObjectSerializer { protected XmlObjectSerializer() { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public abstract bool IsStartObject(System.Xml.XmlDictionaryReader reader); + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public virtual bool IsStartObject(System.Xml.XmlReader reader) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public virtual object? ReadObject(System.IO.Stream stream) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public virtual object? ReadObject(System.Xml.XmlDictionaryReader reader) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public abstract object? ReadObject(System.Xml.XmlDictionaryReader reader, bool verifyObjectName); + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public virtual object? ReadObject(System.Xml.XmlReader reader) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public virtual object? ReadObject(System.Xml.XmlReader reader, bool verifyObjectName) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public abstract void WriteEndObject(System.Xml.XmlDictionaryWriter writer); + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public virtual void WriteEndObject(System.Xml.XmlWriter writer) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public virtual void WriteObject(System.IO.Stream stream, object? graph) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public virtual void WriteObject(System.Xml.XmlDictionaryWriter writer, object? graph) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public virtual void WriteObject(System.Xml.XmlWriter writer, object? graph) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public abstract void WriteObjectContent(System.Xml.XmlDictionaryWriter writer, object? graph); + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public virtual void WriteObjectContent(System.Xml.XmlWriter writer, object? graph) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public abstract void WriteStartObject(System.Xml.XmlDictionaryWriter writer, object? graph); + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public virtual void WriteStartObject(System.Xml.XmlWriter writer, object? graph) { } } public static partial class XmlSerializableServices @@ -100,7 +132,9 @@ public static void WriteNodes(System.Xml.XmlWriter xmlWriter, System.Xml.XmlNode } public static partial class XPathQueryGenerator { + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public static string CreateFromDataContractSerializer(System.Type type, System.Reflection.MemberInfo[] pathToMember, System.Text.StringBuilder? rootElementXpath, out System.Xml.XmlNamespaceManager namespaces) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public static string CreateFromDataContractSerializer(System.Type type, System.Reflection.MemberInfo[] pathToMember, out System.Xml.XmlNamespaceManager namespaces) { throw null; } } public partial class XsdDataContractExporter @@ -109,14 +143,23 @@ public XsdDataContractExporter() { } public XsdDataContractExporter(System.Xml.Schema.XmlSchemaSet? schemas) { } public System.Runtime.Serialization.ExportOptions? Options { get { throw null; } set { } } public System.Xml.Schema.XmlSchemaSet Schemas { get { throw null; } } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public bool CanExport(System.Collections.Generic.ICollection assemblies) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public bool CanExport(System.Collections.Generic.ICollection types) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public bool CanExport(System.Type type) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public void Export(System.Collections.Generic.ICollection assemblies) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public void Export(System.Collections.Generic.ICollection types) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public void Export(System.Type type) { } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public System.Xml.XmlQualifiedName? GetRootElementName(System.Type type) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public System.Xml.Schema.XmlSchemaType? GetSchemaType(System.Type type) { throw null; } + [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute("Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the required types are preserved.")] public System.Xml.XmlQualifiedName GetSchemaTypeName(System.Type type) { throw null; } } } From 74a721a94d080d4cf2bc17d5bab39cdbc7b4bc7b Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Wed, 14 Apr 2021 14:24:12 -0700 Subject: [PATCH 02/10] Refactor MemberTypes declaration --- .../Serialization/ClassDataContract.cs | 26 ++++++++--------- .../Serialization/CollectionDataContract.cs | 24 +++------------- .../Runtime/Serialization/DataContract.cs | 28 +++---------------- .../Runtime/Serialization/EnumDataContract.cs | 6 +--- .../GenericParameterDataContract.cs | 6 +--- .../Serialization/PrimitiveDataContract.cs | 14 ++-------- .../Serialization/SpecialTypeDataContract.cs | 14 ++-------- .../Serialization/SurrogateDataContract.cs | 6 +--- .../Runtime/Serialization/XmlDataContract.cs | 6 +--- 9 files changed, 27 insertions(+), 103 deletions(-) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs index da3417c2264006..5f731aed3004b2 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs @@ -34,6 +34,14 @@ internal sealed class ClassDataContract : DataContract private bool _isScriptObject; + internal const DynamicallyAccessedMemberTypes DataContractPreserveMemberTypes = + DynamicallyAccessedMemberTypes.PublicMethods | + DynamicallyAccessedMemberTypes.NonPublicMethods | + DynamicallyAccessedMemberTypes.PublicConstructors | + DynamicallyAccessedMemberTypes.NonPublicConstructors | + DynamicallyAccessedMemberTypes.PublicFields | + DynamicallyAccessedMemberTypes.PublicProperties; + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal ClassDataContract(Type type) : base(new ClassDataContractCriticalHelper(type)) { @@ -730,11 +738,7 @@ private sealed class ClassDataContractCriticalHelper : DataContract.DataContract public XmlDictionaryString[]? MemberNamespaces; [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] - internal ClassDataContractCriticalHelper([DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods | - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors)] + internal ClassDataContractCriticalHelper([DynamicallyAccessedMembers(DataContractPreserveMemberTypes)] Type type) : base(type) { XmlQualifiedName stableName = GetStableNameAndSetHasDataContract(type); @@ -849,11 +853,7 @@ internal ClassDataContractCriticalHelper([DynamicallyAccessedMembers( [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal ClassDataContractCriticalHelper( - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods)] + [DynamicallyAccessedMembers(DataContractPreserveMemberTypes)] Type type, XmlDictionaryString ns, string[] memberNames) : base(type) { this.StableName = new XmlQualifiedName(GetStableNameAndSetHasDataContract(type).Name, ns.Value); @@ -1402,11 +1402,7 @@ internal bool IsNonAttributedType [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void SetKeyValuePairAdapterFlags( - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods | - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors)] + [DynamicallyAccessedMembers(DataContractPreserveMemberTypes)] Type type) { if (type.IsGenericType && type.GetGenericTypeDefinition() == Globals.TypeOfKeyValuePairAdapter) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs index afbb240141dc3e..fcc71aa9b346eb 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs @@ -581,11 +581,7 @@ private void Init(CollectionKind kind, Type? itemType, CollectionDataContractAtt // array [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal CollectionDataContractCriticalHelper( - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods)] + [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type) : base(type) { if (type == Globals.TypeOfArray) @@ -599,11 +595,7 @@ internal CollectionDataContractCriticalHelper( // read-only collection [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal CollectionDataContractCriticalHelper( - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods)] + [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type, CollectionKind kind, Type itemType, MethodInfo getEnumeratorMethod, string? deserializationExceptionMessage) : base(type) @@ -624,11 +616,7 @@ internal CollectionDataContractCriticalHelper( // collection [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal CollectionDataContractCriticalHelper( - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods)] + [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type, CollectionKind kind, Type itemType, MethodInfo getEnumeratorMethod, MethodInfo? addMethod, ConstructorInfo? constructor) : base(type) { @@ -658,11 +646,7 @@ internal CollectionDataContractCriticalHelper(Type type, CollectionKind kind, Ty [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal CollectionDataContractCriticalHelper( - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods)] + [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type, string invalidCollectionInSharedContractMessage) : base(type) { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs index 1dd9a6c83a6ba7..f477934ff248f9 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs @@ -173,12 +173,7 @@ protected DataContractCriticalHelper Helper { return _helper; } } - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods | - DynamicallyAccessedMemberTypes.PublicFields)] + [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] public Type UnderlyingType { get @@ -364,12 +359,7 @@ internal class DataContractCriticalHelper private static readonly object s_namespacesLock = new object(); private static readonly object s_clrTypeStringsLock = new object(); - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods | - DynamicallyAccessedMemberTypes.PublicFields)] + [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] private Type _underlyingType; private Type? _originalUnderlyingType; private bool _isReference; @@ -1028,12 +1018,7 @@ internal static void ThrowInvalidDataContractException(string? message, Type? ty } internal DataContractCriticalHelper( - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods | - DynamicallyAccessedMemberTypes.PublicFields)] + [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type) { _underlyingType = type; @@ -1041,12 +1026,7 @@ internal DataContractCriticalHelper( _isValueType = type.IsValueType; } - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods | - DynamicallyAccessedMemberTypes.PublicFields)] + [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] internal Type UnderlyingType { get { return _underlyingType; } diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/EnumDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/EnumDataContract.cs index 46ed99ff87ed3c..6771f434196872 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/EnumDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/EnumDataContract.cs @@ -100,11 +100,7 @@ internal static void Add(Type type, string localName) [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal EnumDataContractCriticalHelper( - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods)] + [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type) : base(type) { this.StableName = DataContract.GetStableName(type, out _hasDataContract); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/GenericParameterDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/GenericParameterDataContract.cs index e507befb094f57..b6183ea222f6ec 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/GenericParameterDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/GenericParameterDataContract.cs @@ -39,11 +39,7 @@ private sealed class GenericParameterDataContractCriticalHelper : DataContract.D [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal GenericParameterDataContractCriticalHelper( - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods)] + [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type) : base(type) { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs index feec5c8e203a4c..8d2fe8346f5e08 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs @@ -31,12 +31,7 @@ internal static PrimitiveDataContract NullContract private readonly PrimitiveDataContractCriticalHelper _helper; protected PrimitiveDataContract( - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods | - DynamicallyAccessedMemberTypes.PublicFields)] + [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type, XmlDictionaryString name, XmlDictionaryString ns) : base(new PrimitiveDataContractCriticalHelper(type, name, ns)) { _helper = (base.Helper as PrimitiveDataContractCriticalHelper)!; @@ -150,12 +145,7 @@ private sealed class PrimitiveDataContractCriticalHelper : DataContract.DataCont private MethodInfo? _xmlFormatReaderMethod; internal PrimitiveDataContractCriticalHelper( - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods | - DynamicallyAccessedMemberTypes.PublicFields)] + [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type, XmlDictionaryString name, XmlDictionaryString ns) : base(type) { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SpecialTypeDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SpecialTypeDataContract.cs index 61798b24c685ee..010871e02e13ab 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SpecialTypeDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SpecialTypeDataContract.cs @@ -11,12 +11,7 @@ internal sealed class SpecialTypeDataContract : DataContract private readonly SpecialTypeDataContractCriticalHelper _helper; public SpecialTypeDataContract( - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods | - DynamicallyAccessedMemberTypes.PublicFields)] + [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type, XmlDictionaryString name, XmlDictionaryString ns) : base(new SpecialTypeDataContractCriticalHelper(type, name, ns)) { @@ -28,12 +23,7 @@ public SpecialTypeDataContract( private sealed class SpecialTypeDataContractCriticalHelper : DataContract.DataContractCriticalHelper { internal SpecialTypeDataContractCriticalHelper( - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods | - DynamicallyAccessedMemberTypes.PublicFields)] + [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type, XmlDictionaryString name, XmlDictionaryString ns) : base(type) { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SurrogateDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SurrogateDataContract.cs index 3f9f692c190fa7..e5167c7ed36623 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SurrogateDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SurrogateDataContract.cs @@ -89,11 +89,7 @@ private sealed class SurrogateDataContractCriticalHelper : DataContract.DataCont [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal SurrogateDataContractCriticalHelper( - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods)] + [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type, ISerializationSurrogate serializationSurrogate) : base(type) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlDataContract.cs index 14bfc5e763f850..146924d4dfd318 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlDataContract.cs @@ -129,11 +129,7 @@ private sealed class XmlDataContractCriticalHelper : DataContract.DataContractCr [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal XmlDataContractCriticalHelper( - [DynamicallyAccessedMembers( - DynamicallyAccessedMemberTypes.PublicConstructors | - DynamicallyAccessedMemberTypes.NonPublicConstructors | - DynamicallyAccessedMemberTypes.PublicMethods | - DynamicallyAccessedMemberTypes.NonPublicMethods)] + [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type) : base(type) { if (type.IsDefined(Globals.TypeOfDataContractAttribute, false)) From 1cfd78fc0eb8bb90c3d2517c8302f3e942527835 Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Wed, 14 Apr 2021 15:44:02 -0700 Subject: [PATCH 03/10] Remove Unused UnconditionalSuppressMessages --- .../System/Runtime/Serialization/CollectionDataContract.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs index fcc71aa9b346eb..60311884a19a1d 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs @@ -1087,9 +1087,6 @@ internal static bool TryCreateGetOnlyCollectionDataContract(Type type, [NotNullW } } - [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2075:MakeGenericMethod", - Justification = "Warnings about calling getMethod on the interface type are safe since we are annotating both the type and the " + - "interface with DynamicallyAccessedMembers.")] internal static MethodInfo? GetTargetMethodWithName(string name, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, @@ -1373,9 +1370,6 @@ private static string GetInvalidCollectionMessage(string message, string nestedM return (param == null) ? SR.Format(message, nestedMessage) : SR.Format(message, nestedMessage, param); } - [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2075:MakeGenericMethod", - Justification = "Warnings about calling getMethod on the interface type are safe since we are annotating both the type and the " + - "interface with DynamicallyAccessedMembers.")] private static void FindCollectionMethodsOnInterface( [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, From dadc8583775b950e44c3781008ff5c86634b762b Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Thu, 15 Apr 2021 10:56:20 -0700 Subject: [PATCH 04/10] Addressing some PR Feedback --- .../Serialization/CollectionDataContract.cs | 16 ++++++++++++---- .../System/Runtime/Serialization/DataMember.cs | 2 -- .../Serialization/XmlFormatGeneratorStatics.cs | 5 +---- .../Serialization/XmlFormatReaderGenerator.cs | 5 +---- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs index 60311884a19a1d..d8f19c1439fd11 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs @@ -1087,6 +1087,9 @@ internal static bool TryCreateGetOnlyCollectionDataContract(Type type, [NotNullW } } + // Once https://github.com/mono/linker/issues/1731 is fixed we can remove the suppression from here as it won't be needed any longer. + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2075:GetMethod", + Justification = "The DynamicallyAccessedMembers declarations will ensure the interface methods will be preserved.")] internal static MethodInfo? GetTargetMethodWithName(string name, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, @@ -1370,6 +1373,9 @@ private static string GetInvalidCollectionMessage(string message, string nestedM return (param == null) ? SR.Format(message, nestedMessage) : SR.Format(message, nestedMessage, param); } + // Once https://github.com/mono/linker/issues/1731 is fixed we can remove the suppression from here as it won't be needed any longer. + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2075:GetMethod", + Justification = "The DynamicallyAccessedMembers declarations will ensure the interface methods will be preserved.")] private static void FindCollectionMethodsOnInterface( [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, @@ -1441,10 +1447,12 @@ private static void GetCollectionMethods( } } - [DynamicDependency(DynamicallyAccessedMemberTypes.PublicMethods, typeof(IEnumerable<>))] - [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2067:RequiresUnreferencedCode", - Justification = "Method will be preserved by the DynamicDependency attribute.")] - private static MethodInfo? GetIEnumerableGetEnumeratorMethod(Type type, Type ienumerableInterface) => GetTargetMethodWithName(Globals.GetEnumeratorMethodName, type, ienumerableInterface); + private static MethodInfo? GetIEnumerableGetEnumeratorMethod( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] + Type type, + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods)] + Type ienumerableInterface) + => GetTargetMethodWithName(Globals.GetEnumeratorMethodName, type, ienumerableInterface); private static bool IsKnownInterface(Type type) { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs index c19538d498020f..88c9d33d7cf0ac 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs @@ -172,9 +172,7 @@ internal CriticalHelper(MemberInfo memberInfo) { _emitDefaultValue = Globals.DefaultEmitDefaultValue; _memberInfo = memberInfo; -#pragma warning disable IL2026 // Methods annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code _memberPrimitiveContract = PrimitiveDataContract.NullContract; -#pragma warning restore IL2026 // Methods annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code } internal MemberInfo MemberInfo diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs index 1d9378100f4b41..ba6fbe3b10eead 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs @@ -605,14 +605,11 @@ internal static MethodInfo CheckEndOfArrayMethod private static MethodInfo? s_getArrayLengthMethod; internal static MethodInfo GetArrayLengthMethod { - [DynamicDependency(DynamicallyAccessedMemberTypes.PublicProperties, typeof(Array))] - [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2075:RequiresUnreferencedCode", - Justification = "The DynamicDependency attribute ensures that the right members are preserved.")] get { if (s_getArrayLengthMethod == null) { - s_getArrayLengthMethod = Globals.TypeOfArray.GetProperty("Length")!.GetMethod; + s_getArrayLengthMethod = typeof(Array).GetProperty("Length")!.GetMethod; Debug.Assert(s_getArrayLengthMethod != null); } return s_getArrayLengthMethod; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatReaderGenerator.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatReaderGenerator.cs index 79204f93de0499..1e7d399e5c737d 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatReaderGenerator.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatReaderGenerator.cs @@ -275,10 +275,7 @@ private void CreateObject(ClassDataContract classContract) } } - [DynamicDependency(DynamicallyAccessedMemberTypes.PublicFields, typeof(DBNull))] - [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2075:RequiresUnreferencedCode", - Justification = "The DynamicDependency attribute will ensure that DBNull.Value is preserved.")] - private static FieldInfo GetDBNullValueField() => Globals.TypeOfDBNull.GetField("Value")!; + private static FieldInfo GetDBNullValueField() => typeof(DBNull).GetField("Value")!; private void InvokeOnDeserializing(ClassDataContract classContract) { From c3446d0cd10640b68ec0bb112ccb851374bc96c4 Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Thu, 15 Apr 2021 13:56:06 -0700 Subject: [PATCH 05/10] Suppress MakeGenericMethod calls in AccessorBuilder --- .../System/Runtime/Serialization/AccessorBuilder.cs | 13 +++++++++---- .../Runtime/Serialization/ClassDataContract.cs | 2 -- .../src/System/Runtime/Serialization/DataMember.cs | 2 -- .../Runtime/Serialization/ReflectionClassWriter.cs | 1 - .../Runtime/Serialization/ReflectionReader.cs | 3 --- 5 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/AccessorBuilder.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/AccessorBuilder.cs index 8505e2f25abe03..738d02ed342e2d 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/AccessorBuilder.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/AccessorBuilder.cs @@ -25,14 +25,18 @@ internal static class FastInvokerBuilder private static readonly MethodInfo s_createSetterInternal = typeof(FastInvokerBuilder).GetMethod(nameof(CreateSetterInternal), BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static)!; private static readonly MethodInfo s_make = typeof(FastInvokerBuilder).GetMethod(nameof(Make), BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static)!; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] - public static Func GetMakeNewInstanceFunc(Type type) + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", + Justification = "The call to MakeGenericMethod is safe due to the fact that FastInvokerBuilder.Make is not annotated.")] + public static Func GetMakeNewInstanceFunc( + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] + Type type) { Func make = s_make.MakeGenericMethod(type).CreateDelegate>(); return make; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", + Justification = "The call to MakeGenericMethod is safe due to the fact that FastInvokerBuilder.CreateGetterInternal is not annotated.")] public static Getter CreateGetter(MemberInfo memberInfo) { if (memberInfo is PropertyInfo propInfo) @@ -55,7 +59,8 @@ public static Getter CreateGetter(MemberInfo memberInfo) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", + Justification = "The call to MakeGenericMethod is safe due to the fact that FastInvokerBuilder.CreateSetterInternal is not annotated.")] public static Setter CreateSetter(MemberInfo memberInfo) { if (memberInfo is PropertyInfo) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs index 5f731aed3004b2..3efb6d13bc98fb 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs @@ -208,7 +208,6 @@ internal MethodInfo? GetKeyValuePairMethodInfo private Func? _makeNewInstance; private Func MakeNewInstance { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_makeNewInstance == null) @@ -220,7 +219,6 @@ private Func MakeNewInstance } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal bool CreateNewInstanceViaDefaultConstructor([NotNullWhen(true)] out object? obj) { ConstructorInfo? ci = GetNonAttributedTypeConstructor(); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs index 88c9d33d7cf0ac..6b46c8ca4f5e47 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs @@ -125,7 +125,6 @@ internal DataMember? ConflictingMember private FastInvokerBuilder.Getter? _getter; internal FastInvokerBuilder.Getter Getter { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_getter == null) @@ -140,7 +139,6 @@ internal FastInvokerBuilder.Getter Getter private FastInvokerBuilder.Setter? _setter; internal FastInvokerBuilder.Setter Setter { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (_setter == null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionClassWriter.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionClassWriter.cs index 848156f0d60e0e..1aca720f1d6253 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionClassWriter.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionClassWriter.cs @@ -106,7 +106,6 @@ public void ReflectionWriteValue(XmlWriterDelegator xmlWriter, XmlObjectSerializ [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected abstract int ReflectionWriteMembers(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract, ClassDataContract derivedMostClassContract, int childElementIndex, XmlDictionaryString[]? memberNames); - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] protected object? ReflectionGetMemberValue(object obj, DataMember dataMember) { return dataMember.Getter(obj); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs index 0d7cb7642899af..ce3e106d197da5 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs @@ -361,13 +361,11 @@ private CollectionReadItemDelegate GetReflectionReadValueDelegate(Type type) }; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private object? ReflectionGetMemberValue(object obj, DataMember dataMember) { return dataMember.Getter(obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void ReflectionSetMemberValue(ref object obj, object? memberValue, DataMember dataMember) { dataMember.Setter(ref obj, memberValue); @@ -416,7 +414,6 @@ private void InvokeDeserializationCallback(object obj) deserializationCallbackObject?.OnDeserialization(null); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private static object CreateObject(ClassDataContract classContract) { object? obj; From 1963165a32cc9b6070da3ba075f453bacd851128 Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Thu, 15 Apr 2021 14:54:55 -0700 Subject: [PATCH 06/10] Suppressing error in NullPrimitiveDataContract constructor --- .../src/System/Runtime/Serialization/DataMember.cs | 3 --- .../System/Runtime/Serialization/PrimitiveDataContract.cs | 5 +++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs index 6b46c8ca4f5e47..b34b6da1a45185 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs @@ -163,9 +163,6 @@ private sealed class CriticalHelper private bool _hasConflictingNameAndType; private DataMember? _conflictingMember; - [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", - Justification = "The only use of this field is on the following property getter which is already " + - "annotated as RequiresUnreferencedCode.")] internal CriticalHelper(MemberInfo memberInfo) { _emitDefaultValue = Globals.DefaultEmitDefaultValue; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs index 8d2fe8346f5e08..08a3c9f4e1a19b 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs @@ -17,7 +17,6 @@ internal abstract class PrimitiveDataContract : DataContract internal static PrimitiveDataContract? s_NullContract; internal static PrimitiveDataContract NullContract { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_NullContract == null) @@ -357,7 +356,9 @@ public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, internal sealed class NullPrimitiveDataContract : PrimitiveDataContract { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", + Justification = "This warns because the call to Base has the type annotated with DynamicallyAccessedMembers so it warns" + + "when looking into the methods of NullPrimitiveDataContract. Because this just represents null, we suppress.")] public NullPrimitiveDataContract() : base(typeof(NullPrimitiveDataContract), DictionaryGlobals.EmptyString, DictionaryGlobals.EmptyString) { From 64d7a44a9af601c3097c75adbddf7f8cbab3e37e Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Fri, 16 Apr 2021 13:34:01 -0700 Subject: [PATCH 07/10] Suppress other MakeGenericMethod linker warnings --- .../Serialization/CollectionDataContract.cs | 18 +++++++++++------- .../Json/JsonFormatReaderGenerator.cs | 8 ++++++-- .../Json/JsonFormatWriterGenerator.cs | 8 ++++++-- .../Runtime/Serialization/ReflectionReader.cs | 10 ++++++---- .../Serialization/XmlFormatGeneratorStatics.cs | 3 ++- 5 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs index d8f19c1439fd11..d0fc518254a640 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs @@ -455,13 +455,11 @@ internal XmlFormatGetOnlyCollectionReaderDelegate XmlFormatGetOnlyCollectionRead } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void IncrementCollectionCount(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context) { _helper.IncrementCollectionCount(xmlWriter, obj, context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal IEnumerator GetEnumeratorForCollection(object obj) { return _helper.GetEnumeratorForCollection(obj); @@ -812,7 +810,6 @@ internal XmlFormatGetOnlyCollectionReaderDelegate? XmlFormatGetOnlyCollectionRea private static void DummyIncrementCollectionCount(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context) { } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal void IncrementCollectionCount(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context) { if (_incrementCollectionCountDelegate == null) @@ -832,13 +829,13 @@ internal void IncrementCollectionCount(XmlWriterDelegator xmlWriter, object obj, case CollectionKind.GenericCollection: case CollectionKind.GenericList: { - var buildIncrementCollectionCountDelegate = BuildIncrementCollectionCountDelegateMethod.MakeGenericMethod(ItemType); + var buildIncrementCollectionCountDelegate = GetBuildIncrementCollectionCountGenericDelegate(ItemType); _incrementCollectionCountDelegate = (IncrementCollectionCountDelegate)buildIncrementCollectionCountDelegate.Invoke(null, Array.Empty())!; } break; case CollectionKind.GenericDictionary: { - var buildIncrementCollectionCountDelegate = BuildIncrementCollectionCountDelegateMethod.MakeGenericMethod(Globals.TypeOfKeyValuePair.MakeGenericType(ItemType.GetGenericArguments())); + var buildIncrementCollectionCountDelegate = GetBuildIncrementCollectionCountGenericDelegate(Globals.TypeOfKeyValuePair.MakeGenericType(ItemType.GetGenericArguments())); _incrementCollectionCountDelegate = (IncrementCollectionCountDelegate)buildIncrementCollectionCountDelegate.Invoke(null, Array.Empty())!; } break; @@ -852,6 +849,10 @@ internal void IncrementCollectionCount(XmlWriterDelegator xmlWriter, object obj, _incrementCollectionCountDelegate(xmlWriter, obj, context); } + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", + Justification = "The call to MakeGenericMethod is safe due to the fact that CollectionDataContractCriticalHelper.BuildIncrementCollectionCountDelegate is not annotated.")] + private MethodInfo GetBuildIncrementCollectionCountGenericDelegate(Type type) => BuildIncrementCollectionCountDelegateMethod.MakeGenericMethod(type); + private static MethodInfo? s_buildIncrementCollectionCountDelegateMethod; private static MethodInfo BuildIncrementCollectionCountDelegateMethod @@ -880,7 +881,6 @@ private static IncrementCollectionCountDelegate BuildIncrementCollectionCountDel private CreateGenericDictionaryEnumeratorDelegate? _createGenericDictionaryEnumeratorDelegate; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal IEnumerator GetEnumeratorForCollection(object obj) { IEnumerator enumerator = ((IEnumerable)obj).GetEnumerator(); @@ -889,7 +889,7 @@ internal IEnumerator GetEnumeratorForCollection(object obj) if (_createGenericDictionaryEnumeratorDelegate == null) { var keyValueTypes = ItemType.GetGenericArguments(); - MethodInfo buildCreateGenericDictionaryEnumerator = BuildCreateGenericDictionaryEnumerato.MakeGenericMethod(keyValueTypes[0], keyValueTypes[1]); + MethodInfo buildCreateGenericDictionaryEnumerator = GetBuildCreateGenericDictionaryEnumeratorGenericMethod(keyValueTypes); _createGenericDictionaryEnumeratorDelegate = (CreateGenericDictionaryEnumeratorDelegate)buildCreateGenericDictionaryEnumerator.Invoke(null, Array.Empty())!; } @@ -903,6 +903,10 @@ internal IEnumerator GetEnumeratorForCollection(object obj) return enumerator; } + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", + Justification = "The call to MakeGenericMethod is safe due to the fact that CollectionDataContractCriticalHelper.BuildCreateGenericDictionaryEnumerator is not annotated.")] + private MethodInfo GetBuildCreateGenericDictionaryEnumeratorGenericMethod(Type[] keyValueTypes) => BuildCreateGenericDictionaryEnumerato.MakeGenericMethod(keyValueTypes[0], keyValueTypes[1]); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] internal Type GetCollectionElementType() { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatReaderGenerator.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatReaderGenerator.cs index 2aeebdc01cc9ad..a43c4f5e39bee0 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatReaderGenerator.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatReaderGenerator.cs @@ -664,7 +664,7 @@ private void ReadCollection(CollectionDataContract collectionContract) if (isArray) { Debug.Assert(growingCollection != null); - MethodInfo ensureArraySizeMethod = XmlFormatGeneratorStatics.EnsureArraySizeMethod.MakeGenericMethod(itemType); + MethodInfo ensureArraySizeMethod = MakeGenericMethod(XmlFormatGeneratorStatics.EnsureArraySizeMethod, itemType); _ilg.Call(null, ensureArraySizeMethod, growingCollection, i); _ilg.Stloc(growingCollection); _ilg.StoreArrayElement(growingCollection, i, value); @@ -683,7 +683,7 @@ private void ReadCollection(CollectionDataContract collectionContract) _ilg.EndFor(); if (isArray) { - MethodInfo trimArraySizeMethod = XmlFormatGeneratorStatics.TrimArraySizeMethod.MakeGenericMethod(itemType); + MethodInfo trimArraySizeMethod = MakeGenericMethod(XmlFormatGeneratorStatics.TrimArraySizeMethod, itemType); _ilg.Call(null, trimArraySizeMethod, growingCollection, i); _ilg.Stloc(_objectLocal); _ilg.Call(_contextArg, XmlFormatGeneratorStatics.AddNewObjectWithIdMethod, objectId, _objectLocal); @@ -702,6 +702,10 @@ private void ReadCollection(CollectionDataContract collectionContract) } } + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", + Justification = "The call to MakeGenericMethod is safe due to the fact that EnsureArraySizeMethod and TrimArraySizeMethod are not annotated.")] + private MethodInfo MakeGenericMethod(MethodInfo method, Type itemType) => method.MakeGenericMethod(itemType); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private void ReadSimpleDictionary(CollectionDataContract collectionContract, Type keyValueType) { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatWriterGenerator.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatWriterGenerator.cs index e62527b995433b..c9b50bff29181c 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatWriterGenerator.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatWriterGenerator.cs @@ -332,10 +332,10 @@ private void WriteCollection(CollectionDataContract collectionContract) break; case CollectionKind.GenericCollection: case CollectionKind.GenericList: - incrementCollectionCountMethod = XmlFormatGeneratorStatics.IncrementCollectionCountGenericMethod.MakeGenericMethod(collectionContract.ItemType); + incrementCollectionCountMethod = MakeIncrementCollectionCountGenericMethod(collectionContract.ItemType); break; case CollectionKind.GenericDictionary: - incrementCollectionCountMethod = XmlFormatGeneratorStatics.IncrementCollectionCountGenericMethod.MakeGenericMethod(Globals.TypeOfKeyValuePair.MakeGenericType(collectionContract.ItemType.GetGenericArguments())); + incrementCollectionCountMethod = MakeIncrementCollectionCountGenericMethod(Globals.TypeOfKeyValuePair.MakeGenericType(collectionContract.ItemType.GetGenericArguments())); break; } if (incrementCollectionCountMethod != null) @@ -490,6 +490,10 @@ private void WriteCollection(CollectionDataContract collectionContract) } } + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", + Justification = "The call to MakeGenericMethod is safe due to the fact that IncrementCollectionCountGeneric is not annotated.")] + private MethodInfo MakeIncrementCollectionCountGenericMethod(Type itemType) => XmlFormatGeneratorStatics.IncrementCollectionCountGenericMethod.MakeGenericMethod(itemType); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private bool TryWritePrimitive(Type type, LocalBuilder? value, MemberInfo? memberInfo, LocalBuilder? arrayItemIndex, LocalBuilder? name, int nameIndex) { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs index ce3e106d197da5..96077550fc88db 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs @@ -29,7 +29,6 @@ internal abstract class ReflectionReader private static MethodInfo CollectionSetItemDelegateMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] get { if (s_getCollectionSetItemDelegateMethod == null) @@ -512,7 +511,6 @@ private object ReflectionCreateCollection(CollectionDataContract collectionContr return ((KeyValue)o).Value; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private CollectionSetItemDelegate GetCollectionSetItemDelegate(CollectionDataContract collectionContract, object resultCollectionObject, bool isReadOnlyCollection) { if (isReadOnlyCollection && collectionContract.Kind == CollectionKind.Array) @@ -542,8 +540,8 @@ private CollectionSetItemDelegate GetCollectionSetItemDelegate(CollectionData { Type keyType = collectionContract.ItemType.GenericTypeArguments[0]; Type valueType = collectionContract.ItemType.GenericTypeArguments[1]; - Func objectToKeyValuePairGetKey = s_objectToKeyValuePairGetKey.MakeGenericMethod(keyType, valueType).CreateDelegate>(); - Func objectToKeyValuePairGetValue = s_objectToKeyValuePairGetValue.MakeGenericMethod(keyType, valueType).CreateDelegate>(); + Func objectToKeyValuePairGetKey = MakeGenericMethod(s_objectToKeyValuePairGetKey, keyType, valueType).CreateDelegate>(); + Func objectToKeyValuePairGetValue = MakeGenericMethod(s_objectToKeyValuePairGetValue, keyType, valueType).CreateDelegate>(); if (collectionContract.Kind == CollectionKind.GenericDictionary) { @@ -607,6 +605,10 @@ private CollectionSetItemDelegate GetCollectionSetItemDelegate(CollectionData } } + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", + Justification = "The call to MakeGenericMethod is safe due to the fact that ObjectToKeyValuePairGetKey and ObjectToKeyValuePairGetValue are not annotated.")] + private MethodInfo MakeGenericMethod(MethodInfo method, Type keyType, Type valueType) => method.MakeGenericMethod(keyType, valueType); + [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] private bool ReflectionTryReadPrimitiveArray(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString collectionItemName, XmlDictionaryString collectionItemNamespace, Type type, Type itemType, int arraySize, [NotNullWhen(true)] out object? resultArray) { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs index ba6fbe3b10eead..411e44c98ac257 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs @@ -760,7 +760,8 @@ internal static MethodInfo GetDefaultValueMethod } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", + Justification = "The call to MakeGenericMethod is safe due to the fact that XmlObjectSerializerWriteContext.GetDefaultValue is not annotated.")] internal static object? GetDefaultValue(Type type) { return GetDefaultValueMethod.MakeGenericMethod(type).Invoke(null, Array.Empty()); From 0a7ed79198c00c35667eaf949e1355d50bedc7f2 Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Fri, 16 Apr 2021 15:43:13 -0700 Subject: [PATCH 08/10] Address remaining feedback and move trimmer string to DataContract --- .../Runtime/Serialization/AccessorBuilder.cs | 4 +- .../Serialization/ClassDataContract.cs | 46 +++--- .../Serialization/CollectionDataContract.cs | 90 +++++------ .../Runtime/Serialization/DataContract.cs | 105 ++++++------- .../Serialization/DataContractResolver.cs | 4 +- .../Serialization/DataContractSerializer.cs | 56 +++---- .../Runtime/Serialization/DataContractSet.cs | 24 +-- .../DataContractSurrogateCaller.cs | 6 +- .../Runtime/Serialization/DataMember.cs | 8 +- .../Runtime/Serialization/EnumDataContract.cs | 8 +- .../GenericParameterDataContract.cs | 4 +- .../System/Runtime/Serialization/Globals.cs | 4 +- .../Json/DataContractJsonSerializer.cs | 126 ++++++++-------- .../Json/JsonByteArrayDataContract.cs | 4 +- .../Json/JsonClassDataContract.cs | 16 +- .../Json/JsonCollectionDataContract.cs | 20 +-- .../Serialization/Json/JsonDataContract.cs | 20 +-- .../Json/JsonEnumDataContract.cs | 8 +- .../Json/JsonFormatGeneratorStatics.cs | 16 +- .../Json/JsonFormatReaderGenerator.cs | 46 +++--- .../Json/JsonFormatWriterGenerator.cs | 28 ++-- .../Json/JsonObjectDataContract.cs | 6 +- .../Json/JsonQNameDataContract.cs | 4 +- .../Json/JsonStringDataContract.cs | 4 +- .../Serialization/Json/JsonUriDataContract.cs | 4 +- .../Serialization/Json/JsonXmlDataContract.cs | 6 +- .../Json/ReflectionJsonFormatReader.cs | 14 +- .../Json/ReflectionJsonFormatWriter.cs | 8 +- ...lObjectSerializerReadContextComplexJson.cs | 10 +- ...ObjectSerializerWriteContextComplexJson.cs | 24 +-- .../KnownTypeDataContractResolver.cs | 4 +- .../Serialization/PrimitiveDataContract.cs | 140 +++++++++--------- .../Serialization/ReflectionClassWriter.cs | 10 +- .../Runtime/Serialization/ReflectionReader.cs | 46 +++--- .../ReflectionXmlFormatReader.cs | 10 +- .../ReflectionXmlFormatWriter.cs | 8 +- .../Runtime/Serialization/SchemaExporter.cs | 18 +-- .../Serialization/SurrogateDataContract.cs | 8 +- .../Serialization/XPathQueryGenerator.cs | 8 +- .../Runtime/Serialization/XmlDataContract.cs | 16 +- .../XmlFormatGeneratorStatics.cs | 34 ++--- .../Serialization/XmlFormatReaderGenerator.cs | 46 +++--- .../Serialization/XmlFormatWriterGenerator.cs | 28 ++-- .../Serialization/XmlObjectSerializer.cs | 68 ++++----- .../XmlObjectSerializerContext.cs | 32 ++-- .../XmlObjectSerializerReadContext.cs | 44 +++--- .../XmlObjectSerializerReadContextComplex.cs | 18 +-- .../XmlObjectSerializerWriteContext.cs | 54 +++---- .../XmlObjectSerializerWriteContextComplex.cs | 16 +- .../Serialization/XsdDataContractExporter.cs | 26 ++-- 50 files changed, 681 insertions(+), 676 deletions(-) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/AccessorBuilder.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/AccessorBuilder.cs index 738d02ed342e2d..ae7e2147b22b2d 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/AccessorBuilder.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/AccessorBuilder.cs @@ -26,9 +26,9 @@ internal static class FastInvokerBuilder private static readonly MethodInfo s_make = typeof(FastInvokerBuilder).GetMethod(nameof(Make), BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static)!; [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", - Justification = "The call to MakeGenericMethod is safe due to the fact that FastInvokerBuilder.Make is not annotated.")] + Justification = "The call to MakeGenericMethod is safe due to the fact that we are preserving the constructors of type wich is what Make() is doing.")] public static Func GetMakeNewInstanceFunc( - [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] Type type) { Func make = s_make.MakeGenericMethod(type).CreateDelegate>(); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs index 3efb6d13bc98fb..cb9a636e72072d 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs @@ -42,13 +42,13 @@ internal sealed class ClassDataContract : DataContract DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.PublicProperties; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal ClassDataContract(Type type) : base(new ClassDataContractCriticalHelper(type)) { InitClassDataContract(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private ClassDataContract(Type type, XmlDictionaryString ns, string[] memberNames) : base(new ClassDataContractCriticalHelper(type, ns, memberNames)) { InitClassDataContract(); @@ -76,7 +76,7 @@ internal List? Members public XmlDictionaryString?[]? ChildElementNamespaces { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_childElementNamespaces == null) @@ -134,7 +134,7 @@ internal MethodInfo? ExtensionDataSetMethod public override DataContractDictionary? KnownDataContracts { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { return _helper.KnownDataContracts; } } @@ -241,7 +241,7 @@ internal bool CreateNewInstanceViaDefaultConstructor([NotNullWhen(true)] out obj return true; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private XmlFormatClassWriterDelegate CreateXmlFormatWriterDelegate() { return new XmlFormatWriterGenerator().GenerateClassWriter(this); @@ -249,7 +249,7 @@ private XmlFormatClassWriterDelegate CreateXmlFormatWriterDelegate() internal XmlFormatClassWriterDelegate XmlFormatWriterDelegate { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_helper.XmlFormatWriterDelegate == null) @@ -271,7 +271,7 @@ internal XmlFormatClassWriterDelegate XmlFormatWriterDelegate } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private XmlFormatClassReaderDelegate CreateXmlFormatReaderDelegate() { return new XmlFormatReaderGenerator().GenerateClassReader(this); @@ -279,7 +279,7 @@ private XmlFormatClassReaderDelegate CreateXmlFormatReaderDelegate() internal XmlFormatClassReaderDelegate XmlFormatReaderDelegate { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_helper.XmlFormatReaderDelegate == null) @@ -301,7 +301,7 @@ internal XmlFormatClassReaderDelegate XmlFormatReaderDelegate } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static ClassDataContract CreateClassDataContractForKeyValue(Type type, XmlDictionaryString ns, string[] memberNames) { ClassDataContract? cdc = (ClassDataContract?)DataContract.GetDataContractFromGeneratedAssembly(type); @@ -335,7 +335,7 @@ internal static void CheckAndAddMember(List members, DataMember memb members.Add(memberContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static XmlDictionaryString? GetChildNamespaceToDeclare(DataContract dataContract, Type childType, XmlDictionary dictionary) { childType = DataContract.UnwrapNullableType(childType); @@ -458,7 +458,7 @@ internal static bool IsNonSerializedMember(Type type, string memberName) && members.Contains(memberName); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private XmlDictionaryString?[]? CreateChildElementNamespaces() { if (Members == null) @@ -486,7 +486,7 @@ private void EnsureMethodsImported() _helper.EnsureMethodsImported(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext? context) { Debug.Assert(context != null); @@ -498,7 +498,7 @@ public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, Xml XmlFormatWriterDelegate(xmlWriter, obj, context, this); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext? context) { if (_isScriptObject) @@ -735,7 +735,7 @@ private sealed class ClassDataContractCriticalHelper : DataContract.DataContract public XmlDictionaryString[]? MemberNames; public XmlDictionaryString[]? MemberNamespaces; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal ClassDataContractCriticalHelper([DynamicallyAccessedMembers(DataContractPreserveMemberTypes)] Type type) : base(type) { @@ -849,7 +849,7 @@ internal ClassDataContractCriticalHelper([DynamicallyAccessedMembers(DataContrac Globals.TypeOfScriptObject_IsAssignableFrom(this.UnderlyingType); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal ClassDataContractCriticalHelper( [DynamicallyAccessedMembers(DataContractPreserveMemberTypes)] Type type, XmlDictionaryString ns, string[] memberNames) : base(type) @@ -925,7 +925,7 @@ private void EnsureIsReferenceImported(Type type) [MemberNotNull(nameof(_members))] [MemberNotNull(nameof(Members))] - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ImportDataMembers() { Type type = this.UnderlyingType; @@ -1105,7 +1105,7 @@ private static bool CanSerializeMember(FieldInfo? field) return field != null && !ClassDataContract.IsNonSerializedMember(field.DeclaringType!, field.Name); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private bool SetIfGetOnlyCollection(DataMember memberContract) { //OK to call IsCollection here since the use of surrogated collection types is not supported in get-only scenarios @@ -1179,7 +1179,7 @@ private void SetIfMembersHaveConflict(List members) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private XmlQualifiedName GetStableNameAndSetHasDataContract(Type type) { return DataContract.GetStableName(type, out _hasDataContract); @@ -1349,7 +1349,7 @@ internal MethodInfo? ExtensionDataSetMethod internal override DataContractDictionary? KnownDataContracts { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_knownDataContracts != null) @@ -1398,7 +1398,7 @@ internal bool IsNonAttributedType get { return _isNonAttributedType; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void SetKeyValuePairAdapterFlags( [DynamicallyAccessedMembers(DataContractPreserveMemberTypes)] Type type) @@ -1530,7 +1530,7 @@ public int Compare(Member x, Member y) internal static DataMemberConflictComparer Singleton = new DataMemberConflictComparer(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal ClassDataContractCriticalHelper Clone() { ClassDataContractCriticalHelper clonedHelper = new ClassDataContractCriticalHelper(this.UnderlyingType); @@ -1592,7 +1592,7 @@ internal Type ObjectType } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal ClassDataContract Clone() { ClassDataContract clonedDc = new ClassDataContract(this.UnderlyingType); @@ -1606,7 +1606,7 @@ internal ClassDataContract Clone() return clonedDc; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void UpdateNamespaceAndMembers(Type type, XmlDictionaryString ns, string[] memberNames) { this.StableName = new XmlQualifiedName(GetStableName(type).Name, ns.Value); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs index d0fc518254a640..9564644282768f 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs @@ -135,34 +135,34 @@ internal sealed class CollectionDataContract : DataContract private CollectionDataContractCriticalHelper _helper; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal CollectionDataContract(Type type) : base(new CollectionDataContractCriticalHelper(type)) { InitCollectionDataContract(this); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private CollectionDataContract(Type type, CollectionKind kind, Type itemType, MethodInfo getEnumeratorMethod, string? deserializationExceptionMessage) : base(new CollectionDataContractCriticalHelper(type, kind, itemType, getEnumeratorMethod, deserializationExceptionMessage)) { InitCollectionDataContract(GetSharedTypeContract(type)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private CollectionDataContract(Type type, CollectionKind kind, Type itemType, MethodInfo getEnumeratorMethod, MethodInfo? addMethod, ConstructorInfo? constructor) : base(new CollectionDataContractCriticalHelper(type, kind, itemType, getEnumeratorMethod, addMethod, constructor)) { InitCollectionDataContract(GetSharedTypeContract(type)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private CollectionDataContract(Type type, CollectionKind kind, Type itemType, MethodInfo getEnumeratorMethod, MethodInfo? addMethod, ConstructorInfo? constructor, bool isConstructorCheckRequired) : base(new CollectionDataContractCriticalHelper(type, kind, itemType, getEnumeratorMethod, addMethod, constructor, isConstructorCheckRequired)) { InitCollectionDataContract(GetSharedTypeContract(type)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private CollectionDataContract(Type type, string invalidCollectionInSharedContractMessage) : base(new CollectionDataContractCriticalHelper(type, invalidCollectionInSharedContractMessage)) { InitCollectionDataContract(GetSharedTypeContract(type)); @@ -170,7 +170,7 @@ private CollectionDataContract(Type type, string invalidCollectionInSharedContra [MemberNotNull(nameof(_helper))] [MemberNotNull(nameof(_collectionItemName))] - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void InitCollectionDataContract(DataContract? sharedTypeContract) { _helper = (base.Helper as CollectionDataContractCriticalHelper)!; @@ -203,7 +203,7 @@ public Type ItemType public DataContract ItemContract { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { return _itemContract ?? _helper.ItemContract; @@ -262,7 +262,7 @@ internal bool IsDictionary public XmlDictionaryString? ChildElementNamespace { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_childElementNamespace == null) @@ -320,7 +320,7 @@ internal ConstructorInfo? Constructor public override DataContractDictionary? KnownDataContracts { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { return _helper.KnownDataContracts; } @@ -344,7 +344,7 @@ internal bool IsReadOnlyContract get { return DeserializationExceptionMessage != null; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private XmlFormatCollectionWriterDelegate CreateXmlFormatWriterDelegate() { return new XmlFormatWriterGenerator().GenerateCollectionWriter(this); @@ -352,7 +352,7 @@ private XmlFormatCollectionWriterDelegate CreateXmlFormatWriterDelegate() internal XmlFormatCollectionWriterDelegate XmlFormatWriterDelegate { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_helper.XmlFormatWriterDelegate == null) @@ -374,7 +374,7 @@ internal XmlFormatCollectionWriterDelegate XmlFormatWriterDelegate } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private XmlFormatCollectionReaderDelegate CreateXmlFormatReaderDelegate() { return new XmlFormatReaderGenerator().GenerateCollectionReader(this); @@ -382,7 +382,7 @@ private XmlFormatCollectionReaderDelegate CreateXmlFormatReaderDelegate() internal XmlFormatCollectionReaderDelegate XmlFormatReaderDelegate { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_helper.XmlFormatReaderDelegate == null) @@ -409,7 +409,7 @@ internal XmlFormatCollectionReaderDelegate XmlFormatReaderDelegate } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private XmlFormatGetOnlyCollectionReaderDelegate CreateXmlFormatGetOnlyCollectionReaderDelegate() { return new XmlFormatReaderGenerator().GenerateGetOnlyCollectionReader(this); @@ -418,7 +418,7 @@ private XmlFormatGetOnlyCollectionReaderDelegate CreateXmlFormatGetOnlyCollectio internal XmlFormatGetOnlyCollectionReaderDelegate XmlFormatGetOnlyCollectionReaderDelegate { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_helper.XmlFormatGetOnlyCollectionReaderDelegate == null) @@ -465,7 +465,7 @@ internal IEnumerator GetEnumeratorForCollection(object obj) return _helper.GetEnumeratorForCollection(obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal Type GetCollectionElementType() { return _helper.GetCollectionElementType(); @@ -521,7 +521,7 @@ internal static Type[] KnownInterfaces } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void Init(CollectionKind kind, Type? itemType, CollectionDataContractAttribute? collectionContractAttribute) { _kind = kind; @@ -577,7 +577,7 @@ private void Init(CollectionKind kind, Type? itemType, CollectionDataContractAtt } // array - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal CollectionDataContractCriticalHelper( [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type) : base(type) @@ -591,7 +591,7 @@ internal CollectionDataContractCriticalHelper( } // read-only collection - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal CollectionDataContractCriticalHelper( [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type, @@ -612,7 +612,7 @@ internal CollectionDataContractCriticalHelper( } // collection - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal CollectionDataContractCriticalHelper( [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type, @@ -635,14 +635,14 @@ internal CollectionDataContractCriticalHelper( } // collection - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal CollectionDataContractCriticalHelper(Type type, CollectionKind kind, Type itemType, MethodInfo getEnumeratorMethod, MethodInfo? addMethod, ConstructorInfo? constructor, bool isConstructorCheckRequired) : this(type, kind, itemType, getEnumeratorMethod, addMethod, constructor) { _isConstructorCheckRequired = isConstructorCheckRequired; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal CollectionDataContractCriticalHelper( [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type, @@ -665,7 +665,7 @@ internal Type ItemType internal DataContract ItemContract { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_itemContract == null) @@ -760,7 +760,7 @@ internal bool IsItemTypeNullable internal override DataContractDictionary? KnownDataContracts { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (!_isKnownTypeAttributeChecked && UnderlyingType != null) @@ -835,7 +835,7 @@ internal void IncrementCollectionCount(XmlWriterDelegator xmlWriter, object obj, break; case CollectionKind.GenericDictionary: { - var buildIncrementCollectionCountDelegate = GetBuildIncrementCollectionCountGenericDelegate(Globals.TypeOfKeyValuePair.MakeGenericType(ItemType.GetGenericArguments())); + var buildIncrementCollectionCountDelegate = GetBuildIncrementCollectionCountGenericDelegate(typeof(KeyValuePair<,>).MakeGenericType(ItemType.GetGenericArguments())); _incrementCollectionCountDelegate = (IncrementCollectionCountDelegate)buildIncrementCollectionCountDelegate.Invoke(null, Array.Empty())!; } break; @@ -847,6 +847,10 @@ internal void IncrementCollectionCount(XmlWriterDelegator xmlWriter, object obj, } _incrementCollectionCountDelegate(xmlWriter, obj, context); + + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", + Justification = "The call to MakeGenericMethod is safe due to the fact that CollectionDataContractCriticalHelper.BuildIncrementCollectionCountDelegate is not annotated.")] + static MethodInfo GetBuildIncrementCollectionCountGenericDelegate(Type type) => BuildIncrementCollectionCountDelegateMethod.MakeGenericMethod(type); } [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", @@ -901,13 +905,13 @@ internal IEnumerator GetEnumeratorForCollection(object obj) } return enumerator; - } - [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", Justification = "The call to MakeGenericMethod is safe due to the fact that CollectionDataContractCriticalHelper.BuildCreateGenericDictionaryEnumerator is not annotated.")] - private MethodInfo GetBuildCreateGenericDictionaryEnumeratorGenericMethod(Type[] keyValueTypes) => BuildCreateGenericDictionaryEnumerato.MakeGenericMethod(keyValueTypes[0], keyValueTypes[1]); + static MethodInfo GetBuildCreateGenericDictionaryEnumeratorGenericMethod(Type[] keyValueTypes) => GetBuildCreateGenericDictionaryEnumeratorMethodInfo.MakeGenericMethod(keyValueTypes[0], keyValueTypes[1]); + } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal Type GetCollectionElementType() { Debug.Assert(Kind != CollectionKind.Array, "GetCollectionElementType should not be called on Arrays"); @@ -963,7 +967,7 @@ internal Type GetCollectionElementType() private static MethodInfo? s_buildCreateGenericDictionaryEnumerator; - private static MethodInfo BuildCreateGenericDictionaryEnumerato + private static MethodInfo GetBuildCreateGenericDictionaryEnumeratorMethodInfo { get { @@ -985,7 +989,7 @@ private static CreateGenericDictionaryEnumeratorDelegate BuildCreateGenericDicti } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private DataContract? GetSharedTypeContract(Type type) { if (type.IsDefined(Globals.TypeOfCollectionDataContractAttribute, false)) @@ -1006,27 +1010,27 @@ internal static bool IsCollectionInterface(Type type) return ((IList)KnownInterfaces).Contains(type); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static bool IsCollection(Type type) { Type? itemType; return IsCollection(type, out itemType); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static bool IsCollection(Type type, [NotNullWhen(true)] out Type? itemType) { return IsCollectionHelper(type, out itemType, true /*constructorRequired*/); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static bool IsCollection(Type type, bool constructorRequired) { Type? itemType; return IsCollectionHelper(type, out itemType, constructorRequired); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static bool IsCollectionHelper(Type type, [NotNullWhen(true)] out Type? itemType, bool constructorRequired) { if (type.IsArray && DataContract.GetBuiltInDataContract(type) == null) @@ -1038,14 +1042,14 @@ private static bool IsCollectionHelper(Type type, [NotNullWhen(true)] out Type? return IsCollectionOrTryCreate(type, false /*tryCreate*/, out dataContract, out itemType, constructorRequired); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static bool TryCreate(Type type, [NotNullWhen(true)] out DataContract? dataContract) { Type itemType; return IsCollectionOrTryCreate(type, true /*tryCreate*/, out dataContract!, out itemType, true /*constructorRequired*/); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static bool CreateGetOnlyCollectionDataContract(Type type, [NotNullWhen(true)] out DataContract? dataContract) { Type itemType; @@ -1060,7 +1064,7 @@ internal static bool CreateGetOnlyCollectionDataContract(Type type, [NotNullWhen } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static bool TryCreateGetOnlyCollectionDataContract(Type type, [NotNullWhen(true)] out DataContract? dataContract) { dataContract = DataContract.GetDataContractFromGeneratedAssembly(type); @@ -1109,7 +1113,7 @@ private static bool IsArraySegment(Type t) return t.IsGenericType && (t.GetGenericTypeDefinition() == typeof(ArraySegment<>)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static bool IsCollectionOrTryCreate(Type type, bool tryCreate, out DataContract? dataContract, out Type itemType, bool constructorRequired) { dataContract = null; @@ -1347,7 +1351,7 @@ internal static bool IsCollectionDataContract(Type type) return type.IsDefined(Globals.TypeOfCollectionDataContractAttribute, false); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static bool HandleIfInvalidCollection(Type type, bool tryCreate, bool hasCollectionDataContract, bool createContractWithException, string message, string? param, ref DataContract? dataContract) { if (hasCollectionDataContract) @@ -1395,7 +1399,7 @@ private static void FindCollectionMethodsOnInterface( } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static void GetCollectionMethods( [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type, @@ -1600,7 +1604,7 @@ internal bool RequiresMemberAccessForWrite(SecurityException? securityException) return false; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext? context) { Debug.Assert(context != null); @@ -1610,7 +1614,7 @@ public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, Xml XmlFormatWriterDelegate(xmlWriter, obj, context, this); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext? context) { Debug.Assert(context != null); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs index f477934ff248f9..b1284c1a77e5ed 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs @@ -29,6 +29,9 @@ internal abstract class DataContract // this the global dictionary for data contracts introduced for multi-file. private static readonly Dictionary s_dataContracts = new Dictionary(); + internal const string SerializerTrimmerWarning = "Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the " + + "required types are preserved."; + public static Dictionary GetDataContracts() { return s_dataContracts; @@ -67,19 +70,19 @@ internal MethodInfo? ParseMethod get { return _helper.ParseMethod; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static DataContract GetDataContract(Type type) { return GetDataContract(type.TypeHandle, type); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static DataContract GetDataContract(RuntimeTypeHandle typeHandle, Type type) { return GetDataContract(typeHandle, type, SerializationMode.SharedContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static DataContract GetDataContract(RuntimeTypeHandle typeHandle, Type? type, SerializationMode mode) { int id = GetId(typeHandle); @@ -87,20 +90,20 @@ internal static DataContract GetDataContract(RuntimeTypeHandle typeHandle, Type? return dataContract.GetValidContract(mode); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static DataContract GetDataContract(int id, RuntimeTypeHandle typeHandle, SerializationMode mode) { DataContract dataContract = GetDataContractSkipValidation(id, typeHandle, null); return dataContract.GetValidContract(mode); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static DataContract GetDataContractSkipValidation(int id, RuntimeTypeHandle typeHandle, Type? type) { return DataContractCriticalHelper.GetDataContractSkipValidation(id, typeHandle, type); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static DataContract GetGetOnlyCollectionDataContract(int id, RuntimeTypeHandle typeHandle, Type? type, SerializationMode mode) { DataContract dataContract = GetGetOnlyCollectionDataContractSkipValidation(id, typeHandle, type); @@ -112,7 +115,7 @@ internal static DataContract GetGetOnlyCollectionDataContract(int id, RuntimeTyp return dataContract; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static DataContract GetGetOnlyCollectionDataContractSkipValidation(int id, RuntimeTypeHandle typeHandle, Type? type) { return DataContractCriticalHelper.GetGetOnlyCollectionDataContractSkipValidation(id, typeHandle, type); @@ -133,19 +136,19 @@ internal static int GetId(RuntimeTypeHandle typeHandle) return DataContractCriticalHelper.GetId(typeHandle); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public static DataContract? GetBuiltInDataContract(Type type) { return DataContractCriticalHelper.GetBuiltInDataContract(type); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public static DataContract? GetBuiltInDataContract(string name, string ns) { return DataContractCriticalHelper.GetBuiltInDataContract(name, ns); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public static DataContract? GetBuiltInDataContract(string typeName) { return DataContractCriticalHelper.GetBuiltInDataContract(typeName); @@ -200,19 +203,19 @@ internal Type TypeForInitialization { return _helper.TypeForInitialization; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public virtual void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext? context) { throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.UnexpectedContractType, DataContract.GetClrTypeFullName(this.GetType()), DataContract.GetClrTypeFullName(UnderlyingType)))); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public virtual object? ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext? context) { throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.UnexpectedContractType, DataContract.GetClrTypeFullName(this.GetType()), DataContract.GetClrTypeFullName(UnderlyingType)))); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public virtual void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.UnexpectedContractType, DataContract.GetClrTypeFullName(this.GetType()), DataContract.GetClrTypeFullName(UnderlyingType)))); @@ -252,7 +255,7 @@ public XmlQualifiedName StableName public virtual DataContractDictionary? KnownDataContracts { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { return _helper.KnownDataContracts; } @@ -376,7 +379,7 @@ internal class DataContractCriticalHelper /// private Type _typeForInitialization; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static DataContract GetDataContractSkipValidation(int id, RuntimeTypeHandle typeHandle, Type? type) { DataContract dataContract = s_dataContractCache[id]; @@ -392,7 +395,7 @@ internal static DataContract GetDataContractSkipValidation(int id, RuntimeTypeHa return dataContract; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static DataContract GetGetOnlyCollectionDataContractSkipValidation(int id, RuntimeTypeHandle typeHandle, Type? type) { DataContract dataContract = s_dataContractCache[id]; @@ -472,7 +475,7 @@ internal static int GetId(RuntimeTypeHandle typeHandle) } // check whether a corresponding update is required in ClassDataContract.IsNonAttributedTypeValidForSerialization - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static DataContract CreateDataContract(int id, RuntimeTypeHandle typeHandle, Type? type) { DataContract? dataContract = s_dataContractCache[id]; @@ -503,7 +506,7 @@ private static DataContract CreateDataContract(int id, RuntimeTypeHandle typeHan return dataContract; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static DataContract CreateDataContract(Type type) { type = UnwrapNullableType(type); @@ -558,7 +561,7 @@ private static void AssignDataContractToId(DataContract dataContract, int id) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static DataContract CreateGetOnlyCollectionDataContract(int id, RuntimeTypeHandle typeHandle, Type? type) { DataContract? dataContract = null; @@ -581,7 +584,7 @@ private static DataContract CreateGetOnlyCollectionDataContract(int id, RuntimeT } // This method returns adapter types used at runtime to create DataContract. - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static Type GetDataContractAdapterType(Type type) { // Replace the DataTimeOffset ISerializable type passed in with the internal DateTimeOffsetAdapter DataContract type. @@ -617,7 +620,7 @@ private static RuntimeTypeHandle GetDataContractAdapterTypeHandle(RuntimeTypeHan return typeHandle; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public static DataContract? GetBuiltInDataContract(Type type) { if (type.IsInterface && !CollectionDataContract.IsCollectionInterface(type)) @@ -638,7 +641,7 @@ private static RuntimeTypeHandle GetDataContractAdapterTypeHandle(RuntimeTypeHan } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public static DataContract? GetBuiltInDataContract(string name, string ns) { lock (s_initBuiltInContractsLock) @@ -657,7 +660,7 @@ private static RuntimeTypeHandle GetDataContractAdapterTypeHandle(RuntimeTypeHan } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public static DataContract? GetBuiltInDataContract(string typeName) { if (!typeName.StartsWith("System.", StringComparison.Ordinal)) @@ -736,7 +739,7 @@ private static RuntimeTypeHandle GetDataContractAdapterTypeHandle(RuntimeTypeHan } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public static bool TryCreateBuiltInDataContract(Type type, [NotNullWhen(true)] out DataContract? dataContract) { if (type.IsEnum) // Type.GetTypeCode will report Enums as TypeCode.IntXX @@ -818,7 +821,7 @@ public static bool TryCreateBuiltInDataContract(Type type, [NotNullWhen(true)] o return dataContract != null; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public static bool TryCreateBuiltInDataContract(string name, string ns, [NotNullWhen(true)] out DataContract? dataContract) { dataContract = null; @@ -1093,7 +1096,7 @@ internal XmlQualifiedName StableName internal virtual DataContractDictionary? KnownDataContracts { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { return null; } set { /* do nothing */ } } @@ -1193,13 +1196,13 @@ internal void ThrowInvalidDataContractException(string message) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static bool IsTypeSerializable(Type type) { return IsTypeSerializable(type, new HashSet()); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static bool IsTypeSerializable(Type type, HashSet previousCollectionTypes) { Type? itemType; @@ -1311,14 +1314,14 @@ internal static bool IsValidNCName(string name) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static XmlQualifiedName GetStableName(Type type) { bool hasDataContract; return GetStableName(type, out hasDataContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static XmlQualifiedName GetStableName(Type type, out bool hasDataContract) { type = UnwrapRedundantNullableType(type); @@ -1345,7 +1348,7 @@ internal static XmlQualifiedName GetStableName(Type type, out bool hasDataContra return stableName; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static XmlQualifiedName GetDCTypeStableName(Type type, DataContractAttribute dataContractAttribute) { string? name = null, ns = null; @@ -1374,7 +1377,7 @@ private static XmlQualifiedName GetDCTypeStableName(Type type, DataContractAttri return CreateQualifiedName(name, ns); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static XmlQualifiedName GetNonDCTypeStableName(Type type) { string? name = null, ns = null; @@ -1397,7 +1400,7 @@ private static XmlQualifiedName GetNonDCTypeStableName(Type type) return CreateQualifiedName(name, ns); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static bool TryGetBuiltInXmlAndArrayTypeStableName(Type type, [NotNullWhen(true)] out XmlQualifiedName? stableName) { stableName = null; @@ -1440,7 +1443,7 @@ internal static bool TryGetDCAttribute(Type type, [NotNullWhen(true)] out DataCo return dataContractAttribute != null; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static XmlQualifiedName GetCollectionStableName(Type type, Type itemType, out CollectionDataContractAttribute? collectionContractAttribute) { string? name, ns; @@ -1485,7 +1488,7 @@ internal static XmlQualifiedName GetCollectionStableName(Type type, Type itemTyp return CreateQualifiedName(name, ns); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static string GetArrayPrefix(ref Type itemType) { string arrayOfPrefix = string.Empty; @@ -1504,13 +1507,13 @@ internal static string GetCollectionNamespace(string elementNs) return IsBuiltInNamespace(elementNs) ? Globals.CollectionsNamespace : elementNs; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static XmlQualifiedName GetDefaultStableName(Type type) { return CreateQualifiedName(GetDefaultStableLocalName(type), GetDefaultStableNamespace(type)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static string GetDefaultStableLocalName(Type type) { if (type.IsGenericParameter) @@ -1641,14 +1644,14 @@ internal static string GetDefaultStableNamespace(string? clrNs) return new Uri(Globals.DataContractXsdBaseNamespaceUri, clrNs).AbsoluteUri; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static void GetDefaultStableName(string fullTypeName, out string localName, out string ns) { CodeTypeReference typeReference = new CodeTypeReference(fullTypeName); GetDefaultStableName(typeReference, out localName, out ns); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static void GetDefaultStableName(CodeTypeReference typeReference, out string localName, out string ns) { string fullTypeName = typeReference.BaseType; @@ -1914,14 +1917,14 @@ private static byte[] ComputeHash(byte[] namespaces) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static string ExpandGenericParameters(string format, Type type) { GenericNameProvider genericNameProviderForType = new GenericNameProvider(type); return ExpandGenericParameters(format, genericNameProviderForType); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static string ExpandGenericParameters(string format, IGenericNameProvider genericNameProvider) { string? digest = null; @@ -1974,7 +1977,7 @@ internal static bool IsTypeNullable(Type type) type.GetGenericTypeDefinition() == Globals.TypeOfNullable); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static DataContractDictionary? ImportKnownTypeAttributes(Type type) { DataContractDictionary? knownDataContracts = null; @@ -1983,7 +1986,7 @@ internal static bool IsTypeNullable(Type type) return knownDataContracts; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static void ImportKnownTypeAttributes(Type? type, Dictionary typesChecked, ref DataContractDictionary? knownDataContracts) { while (type != null && DataContract.IsTypeSerializable(type)) @@ -2080,7 +2083,7 @@ private static void ImportKnownTypeAttributes(Type? type, Dictionary } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static void CheckAndAdd(Type type, Dictionary typesChecked, [NotNullIfNotNull("nameToDataContractTable")] ref DataContractDictionary? nameToDataContractTable) { type = DataContract.UnwrapNullableType(type); @@ -2224,13 +2227,13 @@ internal interface IGenericNameProvider { int GetParameterCount(); IList GetNestedParameterCounts(); - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] string GetParameterName(int paramIndex); - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] string GetNamespaces(); string GetGenericTypeName(); bool ParametersFromBuiltInNamespaces { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get; } } @@ -2266,13 +2269,13 @@ public IList GetNestedParameterCounts() return _nestedParamCounts; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public string GetParameterName(int paramIndex) { return GetStableName(paramIndex).Name; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public string GetNamespaces() { StringBuilder namespaces = new StringBuilder(); @@ -2288,7 +2291,7 @@ public string GetGenericTypeName() public bool ParametersFromBuiltInNamespaces { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { bool parametersFromBuiltInNamespaces = true; @@ -2303,7 +2306,7 @@ public bool ParametersFromBuiltInNamespaces } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private XmlQualifiedName GetStableName(int i) { object o = _genericParams[i]; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractResolver.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractResolver.cs index ca039839323420..696211f216ae46 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractResolver.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractResolver.cs @@ -10,9 +10,9 @@ namespace System.Runtime.Serialization { public abstract class DataContractResolver { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public abstract bool TryResolveType(Type type, Type? declaredType, DataContractResolver knownTypeResolver, out XmlDictionaryString? typeName, out XmlDictionaryString? typeNamespace); - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public abstract Type? ResolveName(string typeName, string? typeNamespace, Type? declaredType, DataContractResolver knownTypeResolver); } } diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSerializer.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSerializer.cs index 5f8f141570025a..fac96571ee397f 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSerializer.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSerializer.cs @@ -172,7 +172,7 @@ public ReadOnlyCollection KnownTypes internal override DataContractDictionary? KnownDataContracts { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (this.knownDataContracts == null && this.knownTypeList != null) @@ -220,7 +220,7 @@ public bool SerializeReadOnlyTypes private DataContract RootContract { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_rootContract == null) @@ -232,13 +232,13 @@ private DataContract RootContract } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void InternalWriteObject(XmlWriterDelegator writer, object? graph) { InternalWriteObject(writer, graph, null); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void InternalWriteObject(XmlWriterDelegator writer, object? graph, DataContractResolver? dataContractResolver) { InternalWriteStartObject(writer, graph); @@ -246,103 +246,103 @@ internal override void InternalWriteObject(XmlWriterDelegator writer, object? gr InternalWriteEndObject(writer); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteObject(XmlWriter writer, object? graph) { WriteObjectHandleExceptions(new XmlWriterDelegator(writer), graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteStartObject(XmlWriter writer, object? graph) { WriteStartObjectHandleExceptions(new XmlWriterDelegator(writer), graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteObjectContent(XmlWriter writer, object? graph) { WriteObjectContentHandleExceptions(new XmlWriterDelegator(writer), graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteEndObject(XmlWriter writer) { WriteEndObjectHandleExceptions(new XmlWriterDelegator(writer)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteStartObject(XmlDictionaryWriter writer, object? graph) { WriteStartObjectHandleExceptions(new XmlWriterDelegator(writer), graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteObjectContent(XmlDictionaryWriter writer, object? graph) { WriteObjectContentHandleExceptions(new XmlWriterDelegator(writer), graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteEndObject(XmlDictionaryWriter writer) { WriteEndObjectHandleExceptions(new XmlWriterDelegator(writer)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void WriteObject(XmlDictionaryWriter writer, object? graph, DataContractResolver? dataContractResolver) { WriteObjectHandleExceptions(new XmlWriterDelegator(writer), graph, dataContractResolver); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadObject(XmlReader reader) { return ReadObjectHandleExceptions(new XmlReaderDelegator(reader), true /*verifyObjectName*/); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadObject(XmlReader reader, bool verifyObjectName) { return ReadObjectHandleExceptions(new XmlReaderDelegator(reader), verifyObjectName); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override bool IsStartObject(XmlReader reader) { return IsStartObjectHandleExceptions(new XmlReaderDelegator(reader)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadObject(XmlDictionaryReader reader, bool verifyObjectName) { return ReadObjectHandleExceptions(new XmlReaderDelegator(reader), verifyObjectName); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override bool IsStartObject(XmlDictionaryReader reader) { return IsStartObjectHandleExceptions(new XmlReaderDelegator(reader)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public object? ReadObject(XmlDictionaryReader reader, bool verifyObjectName, DataContractResolver? dataContractResolver) { return ReadObjectHandleExceptions(new XmlReaderDelegator(reader), verifyObjectName, dataContractResolver); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void InternalWriteStartObject(XmlWriterDelegator writer, object? graph) { WriteRootElement(writer, RootContract, _rootName, _rootNamespace, _needsContractNsAtRoot); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void InternalWriteObjectContent(XmlWriterDelegator writer, object? graph) { InternalWriteObjectContent(writer, graph, null); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void InternalWriteObjectContent(XmlWriterDelegator writer, object? graph, DataContractResolver? dataContractResolver) { if (MaxItemsInObjectGraph == 0) @@ -399,7 +399,7 @@ internal void InternalWriteObjectContent(XmlWriterDelegator writer, object? grap } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static DataContract GetDataContract(DataContract declaredTypeContract, Type declaredType, Type objectType) { if (declaredType.IsInterface && CollectionDataContract.IsCollectionInterface(declaredType)) @@ -416,7 +416,7 @@ internal static DataContract GetDataContract(DataContract declaredTypeContract, } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void InternalWriteEndObject(XmlWriterDelegator writer) { if (!IsRootXmlAny(_rootName, RootContract)) @@ -425,13 +425,13 @@ internal override void InternalWriteEndObject(XmlWriterDelegator writer) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override object? InternalReadObject(XmlReaderDelegator xmlReader, bool verifyObjectName) { return InternalReadObject(xmlReader, verifyObjectName, null); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override object? InternalReadObject(XmlReaderDelegator xmlReader, bool verifyObjectName, DataContractResolver? dataContractResolver) { if (MaxItemsInObjectGraph == 0) @@ -480,7 +480,7 @@ internal override void InternalWriteEndObject(XmlWriterDelegator writer) return context.InternalDeserialize(xmlReader, _rootType, contract, null, null); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override bool InternalIsStartObject(XmlReaderDelegator reader) { return IsRootElement(reader, RootContract, _rootName, _rootNamespace); @@ -497,7 +497,7 @@ internal override bool InternalIsStartObject(XmlReaderDelegator reader) } [return: NotNullIfNotNull("oldObj")] - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static object? SurrogateToDataContractType(ISerializationSurrogateProvider serializationSurrogateProvider, object? oldObj, Type surrogatedDeclaredType, ref Type objType) { object? obj = DataContractSurrogateCaller.GetObjectToSerialize(serializationSurrogateProvider, oldObj, objType, surrogatedDeclaredType); @@ -508,7 +508,7 @@ internal override bool InternalIsStartObject(XmlReaderDelegator reader) return obj; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static Type GetSurrogatedType(ISerializationSurrogateProvider serializationSurrogateProvider, Type type) { return DataContractSurrogateCaller.GetDataContractType(serializationSurrogateProvider, DataContract.UnwrapNullableType(type)); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSet.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSet.cs index 94573485d6d0d3..e24d9c44a63db5 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSet.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSet.cs @@ -32,7 +32,7 @@ internal DataContractSet(IDataContractSurrogate dataContractSurrogate, ICollecti } #endif - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal DataContractSet(DataContractSet dataContractSet) { if (dataContractSet == null) @@ -91,7 +91,7 @@ private Hashtable SurrogateDataTable } #endif - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void Add(Type type) { DataContract dataContract = GetDataContract(type); @@ -105,13 +105,13 @@ internal static void EnsureTypeNotGeneric(Type type) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.GenericTypeNotExportable, type))); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void Add(DataContract dataContract) { Add(dataContract.StableName, dataContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void Add(XmlQualifiedName name, DataContract dataContract) { if (dataContract.IsBuiltInDataContract) @@ -119,7 +119,7 @@ public void Add(XmlQualifiedName name, DataContract dataContract) InternalAdd(name, dataContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void InternalAdd(XmlQualifiedName name, DataContract dataContract) { DataContract? dataContractInSet = null; @@ -155,7 +155,7 @@ internal void InternalAdd(XmlQualifiedName name, DataContract dataContract) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void AddClassDataContract(ClassDataContract classDataContract) { if (classDataContract.BaseContract != null) @@ -188,7 +188,7 @@ private void AddClassDataContract(ClassDataContract classDataContract) AddKnownDataContracts(classDataContract.KnownDataContracts); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void AddCollectionDataContract(CollectionDataContract collectionDataContract) { if (collectionDataContract.IsDictionary) @@ -205,13 +205,13 @@ private void AddCollectionDataContract(CollectionDataContract collectionDataCont AddKnownDataContracts(collectionDataContract.KnownDataContracts); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void AddXmlDataContract(XmlDataContract xmlDataContract) { AddKnownDataContracts(xmlDataContract.KnownDataContracts); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void AddKnownDataContracts(DataContractDictionary? knownDataContracts) { if (knownDataContracts != null) @@ -223,7 +223,7 @@ private void AddKnownDataContracts(DataContractDictionary? knownDataContracts) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal DataContract GetDataContract(Type clrType) { #if SUPPORT_SURROGATE @@ -253,7 +253,7 @@ internal DataContract GetDataContract(Type clrType) return dataContract; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal DataContract GetMemberTypeDataContract(DataMember dataMember) { Type dataMemberType = dataMember.MemberType; @@ -278,7 +278,7 @@ internal DataContract GetMemberTypeDataContract(DataMember dataMember) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal DataContract GetItemTypeDataContract(CollectionDataContract collectionContract) { if (collectionContract.ItemType != null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSurrogateCaller.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSurrogateCaller.cs index f2535338889137..208cd8301cdaa2 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSurrogateCaller.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSurrogateCaller.cs @@ -12,7 +12,7 @@ namespace System.Runtime.Serialization internal static class DataContractSurrogateCaller { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static Type GetDataContractType(ISerializationSurrogateProvider surrogateProvider, Type type) { if (DataContract.GetBuiltInDataContract(type) != null) @@ -21,7 +21,7 @@ internal static Type GetDataContractType(ISerializationSurrogateProvider surroga } [return: NotNullIfNotNull("obj")] - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static object? GetObjectToSerialize(ISerializationSurrogateProvider surrogateProvider, object? obj, Type objType, Type membertype) { if (obj == null) @@ -32,7 +32,7 @@ internal static Type GetDataContractType(ISerializationSurrogateProvider surroga } [return: NotNullIfNotNull("obj")] - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static object? GetDeserializedObject(ISerializationSurrogateProvider surrogateProvider, object? obj, Type objType, Type memberType) { if (obj == null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs index b34b6da1a45185..a44412c20829d9 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs @@ -90,14 +90,14 @@ internal Type MemberType internal DataContract MemberTypeContract { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { return _helper.MemberTypeContract; } } internal PrimitiveDataContract? MemberPrimitiveContract { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { return _helper.MemberPrimitiveContract; @@ -232,7 +232,7 @@ internal Type MemberType internal DataContract MemberTypeContract { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_memberTypeContract == null) @@ -271,7 +271,7 @@ internal DataMember? ConflictingMember internal PrimitiveDataContract? MemberPrimitiveContract { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_memberPrimitiveContract == PrimitiveDataContract.NullContract) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/EnumDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/EnumDataContract.cs index 6771f434196872..665c4d13e99f2c 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/EnumDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/EnumDataContract.cs @@ -22,7 +22,7 @@ internal sealed class EnumDataContract : DataContract public XmlQualifiedName? BaseContractName { get; set; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal EnumDataContract(Type type) : base(new EnumDataContractCriticalHelper(type)) { _helper = (base.Helper as EnumDataContractCriticalHelper)!; @@ -98,7 +98,7 @@ internal static void Add(Type type, string localName) s_nameToType.Add(stableName, type); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal EnumDataContractCriticalHelper( [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type) : base(type) @@ -360,13 +360,13 @@ internal long GetEnumValueFromString(string value) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext? context) { WriteEnumValue(xmlWriter, obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext? context) { object obj = ReadEnumValue(xmlReader); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/GenericParameterDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/GenericParameterDataContract.cs index b6183ea222f6ec..6f44245b30809e 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/GenericParameterDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/GenericParameterDataContract.cs @@ -12,7 +12,7 @@ internal sealed class GenericParameterDataContract : DataContract { private readonly GenericParameterDataContractCriticalHelper _helper; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal GenericParameterDataContract(Type type) : base(new GenericParameterDataContractCriticalHelper(type)) { @@ -37,7 +37,7 @@ private sealed class GenericParameterDataContractCriticalHelper : DataContract.D { private readonly int _parameterPosition; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal GenericParameterDataContractCriticalHelper( [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Globals.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Globals.cs index 92cf68e41b56e5..528641d647e23c 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Globals.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Globals.cs @@ -734,7 +734,7 @@ internal static Type TypeOfDictionaryGeneric private static Type? s_typeOfHashtable; internal static Type TypeOfHashtable { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_typeOfHashtable == null) @@ -789,7 +789,7 @@ internal static Uri DataContractXsdBaseNamespaceUri private static readonly Type? s_typeOfScriptObject; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static ClassDataContract CreateScriptObjectClassDataContract() { Debug.Assert(s_typeOfScriptObject != null); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/DataContractJsonSerializer.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/DataContractJsonSerializer.cs index 84e514f2863d98..74f4d0c0e0930c 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/DataContractJsonSerializer.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/DataContractJsonSerializer.cs @@ -26,8 +26,6 @@ public sealed class DataContractJsonSerializer : XmlObjectSerializer private const char LOW_SURROGATE_END = (char)0xdfff; private const char MAX_CHAR = (char)0xfffe; private const char WHITESPACE = ' '; - internal const string SerializerTrimmerWarning = "Data Contract Serialization and Deserialization might require types that cannot be statically analyzed. Make sure all of the " + - "required types are preserved."; internal IList? knownTypeList; @@ -42,43 +40,43 @@ public sealed class DataContractJsonSerializer : XmlObjectSerializer private readonly DataContractJsonSerializerImpl _serializer; private readonly bool _ignoreExtensionDataObject; - [RequiresUnreferencedCode(SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public DataContractJsonSerializer(Type type) { _serializer = new DataContractJsonSerializerImpl(type); } - [RequiresUnreferencedCode(SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public DataContractJsonSerializer(Type type, string? rootName) : this(type, rootName, null) { } - [RequiresUnreferencedCode(SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public DataContractJsonSerializer(Type type, XmlDictionaryString? rootName) : this(type, rootName, null) { } - [RequiresUnreferencedCode(SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public DataContractJsonSerializer(Type type, IEnumerable? knownTypes) { _serializer = new DataContractJsonSerializerImpl(type, knownTypes); } - [RequiresUnreferencedCode(SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public DataContractJsonSerializer(Type type, string? rootName, IEnumerable? knownTypes) : this(type, new DataContractJsonSerializerSettings() { RootName = rootName, KnownTypes = knownTypes }) { } - [RequiresUnreferencedCode(SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public DataContractJsonSerializer(Type type, XmlDictionaryString? rootName, IEnumerable? knownTypes) { _serializer = new DataContractJsonSerializerImpl(type, rootName, knownTypes); } - [RequiresUnreferencedCode(SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public DataContractJsonSerializer(Type type, DataContractJsonSerializerSettings? settings) { _serializer = new DataContractJsonSerializerImpl(type, settings); @@ -110,7 +108,7 @@ public ReadOnlyCollection KnownTypes internal override DataContractDictionary? KnownDataContracts { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (this.knownDataContracts == null && this.knownTypeList != null) @@ -175,7 +173,7 @@ internal static void CheckIfTypeIsReference(DataContract dataContract) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static DataContract GetDataContract(DataContract declaredTypeContract, Type declaredType, Type objectType) { DataContract contract = DataContractSerializer.GetDataContract(declaredTypeContract, declaredType, objectType); @@ -183,43 +181,43 @@ internal static DataContract GetDataContract(DataContract declaredTypeContract, return contract; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteObject(Stream stream, object? graph) { _serializer.WriteObject(stream, graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteObject(XmlWriter writer, object? graph) { _serializer.WriteObject(writer, graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteObject(XmlDictionaryWriter writer, object? graph) { _serializer.WriteObject(writer, graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadObject(Stream stream) { return _serializer.ReadObject(stream); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadObject(XmlReader reader) { return _serializer.ReadObject(reader); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadObject(XmlReader reader, bool verifyObjectName) { return _serializer.ReadObject(reader, verifyObjectName); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadObject(XmlDictionaryReader reader) { return _serializer.ReadObject(reader); @@ -443,67 +441,67 @@ internal static string ConvertXmlNameToJsonName(string xmlName) return (xmlName == null) ? null : new XmlDictionary().Add(ConvertXmlNameToJsonName(xmlName.Value)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static object? ReadJsonValue(DataContract contract, XmlReaderDelegator reader, XmlObjectSerializerReadContextComplexJson context) { return JsonDataContract.GetJsonDataContract(contract).ReadJsonValue(reader, context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static void WriteJsonValue(JsonDataContract contract, XmlWriterDelegator writer, object graph, XmlObjectSerializerWriteContextComplexJson context, RuntimeTypeHandle declaredTypeHandle) { contract.WriteJsonValue(writer, graph, context, declaredTypeHandle); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteStartObject(XmlWriter writer, object? graph) { _serializer.WriteStartObject(writer, graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteStartObject(XmlDictionaryWriter writer, object? graph) { _serializer.WriteStartObject(writer, graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteObjectContent(XmlWriter writer, object? graph) { _serializer.WriteObjectContent(writer, graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteObjectContent(XmlDictionaryWriter writer, object? graph) { _serializer.WriteObjectContent(writer, graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteEndObject(XmlWriter writer) { _serializer.WriteEndObject(writer); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteEndObject(XmlDictionaryWriter writer) { _serializer.WriteEndObject(writer); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadObject(XmlDictionaryReader reader, bool verifyObjectName) { return _serializer.ReadObject(reader, verifyObjectName); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override bool IsStartObject(XmlReader reader) { return _serializer.IsStartObject(reader); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override bool IsStartObject(XmlDictionaryReader reader) { return _serializer.IsStartObject(reader); @@ -526,25 +524,25 @@ internal sealed class DataContractJsonSerializerImpl : XmlObjectSerializer private DateTimeFormat? _dateTimeFormat; private bool _useSimpleDictionaryFormat; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public DataContractJsonSerializerImpl(Type type) : this(type, (IEnumerable?)null) { } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public DataContractJsonSerializerImpl(Type type, IEnumerable? knownTypes) : this(type, null, knownTypes, int.MaxValue, false, false) { } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public DataContractJsonSerializerImpl(Type type, XmlDictionaryString? rootName, IEnumerable? knownTypes) : this(type, rootName, knownTypes, int.MaxValue, false, false) { } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal DataContractJsonSerializerImpl(Type type, XmlDictionaryString? rootName, IEnumerable? knownTypes, @@ -556,7 +554,7 @@ internal DataContractJsonSerializerImpl(Type type, Initialize(type, rootName, knownTypes, maxItemsInObjectGraph, ignoreExtensionDataObject, emitTypeInformation, false, null, false); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public DataContractJsonSerializerImpl(Type type, DataContractJsonSerializerSettings? settings) { if (settings == null) @@ -590,7 +588,7 @@ public ReadOnlyCollection KnownTypes internal override DataContractDictionary? KnownDataContracts { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (this.knownDataContracts == null && this.knownTypeList != null) @@ -652,7 +650,7 @@ public bool UseSimpleDictionaryFormat private DataContract RootContract { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_rootContract == null) @@ -672,66 +670,66 @@ private XmlDictionaryString RootName } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override bool IsStartObject(XmlReader reader) { // No need to pass in DateTimeFormat to JsonReaderDelegator: no DateTimes will be read in IsStartObject return IsStartObjectHandleExceptions(new JsonReaderDelegator(reader)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override bool IsStartObject(XmlDictionaryReader reader) { // No need to pass in DateTimeFormat to JsonReaderDelegator: no DateTimes will be read in IsStartObject return IsStartObjectHandleExceptions(new JsonReaderDelegator(reader)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadObject(Stream stream) { CheckNull(stream, nameof(stream)); return ReadObject(JsonReaderWriterFactory.CreateJsonReader(stream, XmlDictionaryReaderQuotas.Max)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadObject(XmlReader reader) { return ReadObjectHandleExceptions(new JsonReaderDelegator(reader, this.DateTimeFormat), true); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadObject(XmlReader reader, bool verifyObjectName) { return ReadObjectHandleExceptions(new JsonReaderDelegator(reader, this.DateTimeFormat), verifyObjectName); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadObject(XmlDictionaryReader reader) { return ReadObjectHandleExceptions(new JsonReaderDelegator(reader, this.DateTimeFormat), true); // verifyObjectName } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadObject(XmlDictionaryReader reader, bool verifyObjectName) { return ReadObjectHandleExceptions(new JsonReaderDelegator(reader, this.DateTimeFormat), verifyObjectName); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteEndObject(XmlWriter writer) { // No need to pass in DateTimeFormat to JsonWriterDelegator: no DateTimes will be written in end object WriteEndObjectHandleExceptions(new JsonWriterDelegator(writer)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteEndObject(XmlDictionaryWriter writer) { // No need to pass in DateTimeFormat to JsonWriterDelegator: no DateTimes will be written in end object WriteEndObjectHandleExceptions(new JsonWriterDelegator(writer)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteObject(Stream stream, object? graph) { CheckNull(stream, nameof(stream)); @@ -740,38 +738,38 @@ public override void WriteObject(Stream stream, object? graph) jsonWriter.Flush(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteObject(XmlWriter writer, object? graph) { WriteObjectHandleExceptions(new JsonWriterDelegator(writer, this.DateTimeFormat), graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteObject(XmlDictionaryWriter writer, object? graph) { WriteObjectHandleExceptions(new JsonWriterDelegator(writer, this.DateTimeFormat), graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteObjectContent(XmlWriter writer, object? graph) { WriteObjectContentHandleExceptions(new JsonWriterDelegator(writer, this.DateTimeFormat), graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteObjectContent(XmlDictionaryWriter writer, object? graph) { WriteObjectContentHandleExceptions(new JsonWriterDelegator(writer, this.DateTimeFormat), graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteStartObject(XmlWriter writer, object? graph) { // No need to pass in DateTimeFormat to JsonWriterDelegator: no DateTimes will be written in start object WriteStartObjectHandleExceptions(new JsonWriterDelegator(writer), graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteStartObject(XmlDictionaryWriter writer, object? graph) { // No need to pass in DateTimeFormat to JsonWriterDelegator: no DateTimes will be written in start object @@ -834,7 +832,7 @@ internal static bool IsJsonLocalName(XmlReaderDelegator reader, string elementNa return false; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static object? ReadJsonValue(DataContract contract, XmlReaderDelegator reader, XmlObjectSerializerReadContextComplexJson? context) { return JsonDataContract.GetJsonDataContract(contract).ReadJsonValue(reader, context); @@ -845,7 +843,7 @@ internal static void WriteJsonNull(XmlWriterDelegator writer) writer.WriteAttributeString(null, JsonGlobals.typeString, null, JsonGlobals.nullString); // prefix // namespace } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static void WriteJsonValue(JsonDataContract contract, XmlWriterDelegator writer, object graph, XmlObjectSerializerWriteContextComplexJson? context, RuntimeTypeHandle declaredTypeHandle) { contract.WriteJsonValue(writer, graph, context, declaredTypeHandle); @@ -861,7 +859,7 @@ internal static void WriteJsonValue(JsonDataContract contract, XmlWriterDelegato return (graph == null) ? _rootType : graph.GetType(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override bool InternalIsStartObject(XmlReaderDelegator reader) { if (IsRootElement(reader, RootContract, RootName, XmlDictionaryString.Empty)) @@ -872,7 +870,7 @@ internal override bool InternalIsStartObject(XmlReaderDelegator reader) return IsJsonLocalName(reader, RootName.Value); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override object? InternalReadObject(XmlReaderDelegator xmlReader, bool verifyObjectName) { if (MaxItemsInObjectGraph == 0) @@ -902,13 +900,13 @@ internal override bool InternalIsStartObject(XmlReaderDelegator reader) return context.InternalDeserialize(xmlReader, _rootType, contract, null, null); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void InternalWriteEndObject(XmlWriterDelegator writer) { writer.WriteEndElement(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void InternalWriteObject(XmlWriterDelegator writer, object? graph) { InternalWriteStartObject(writer, graph); @@ -916,7 +914,7 @@ internal override void InternalWriteObject(XmlWriterDelegator writer, object? gr InternalWriteEndObject(writer); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void InternalWriteObjectContent(XmlWriterDelegator writer, object? graph) { if (MaxItemsInObjectGraph == 0) @@ -969,7 +967,7 @@ internal override void InternalWriteObjectContent(XmlWriterDelegator writer, obj } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void InternalWriteStartObject(XmlWriterDelegator writer, object? graph) { if (_rootNameRequiresMapping) @@ -983,7 +981,7 @@ internal override void InternalWriteStartObject(XmlWriterDelegator writer, objec } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void AddCollectionItemTypeToKnownTypes(Type knownType) { Type? itemType; @@ -1000,7 +998,7 @@ private void AddCollectionItemTypeToKnownTypes(Type knownType) } [MemberNotNull(nameof(_rootType))] - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void Initialize(Type type, IEnumerable? knownTypes, int maxItemsInObjectGraph, @@ -1039,7 +1037,7 @@ private void Initialize(Type type, } [MemberNotNull(nameof(_rootType))] - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void Initialize(Type type, XmlDictionaryString? rootName, IEnumerable? knownTypes, @@ -1063,7 +1061,7 @@ internal static void CheckIfTypeIsReference(DataContract dataContract) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static DataContract GetDataContract(DataContract declaredTypeContract, Type declaredType, Type objectType) { DataContract contract = DataContractSerializer.GetDataContract(declaredTypeContract, declaredType, objectType); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonByteArrayDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonByteArrayDataContract.cs index eb43e5e96253c0..5518442c8649da 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonByteArrayDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonByteArrayDataContract.cs @@ -12,13 +12,13 @@ namespace System.Runtime.Serialization.Json { internal sealed class JsonByteArrayDataContract : JsonDataContract { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonByteArrayDataContract(ByteArrayDataContract traditionalByteArrayDataContract) : base(traditionalByteArrayDataContract) { } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson? context) { if (context == null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonClassDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonClassDataContract.cs index b0a8adde843432..148b3eebd7d2b1 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonClassDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonClassDataContract.cs @@ -14,14 +14,14 @@ internal sealed class JsonClassDataContract : JsonDataContract { private readonly JsonClassDataContractCriticalHelper _helper; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonClassDataContract(ClassDataContract traditionalDataContract) : base(new JsonClassDataContractCriticalHelper(traditionalDataContract)) { _helper = (base.Helper as JsonClassDataContractCriticalHelper)!; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private JsonFormatClassReaderDelegate CreateJsonFormatReaderDelegate() { return new ReflectionJsonClassReader(TraditionalClassDataContract).ReflectionReadClass; @@ -29,7 +29,7 @@ private JsonFormatClassReaderDelegate CreateJsonFormatReaderDelegate() internal JsonFormatClassReaderDelegate JsonFormatReaderDelegate { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_helper.JsonFormatReaderDelegate == null) @@ -57,7 +57,7 @@ internal JsonFormatClassReaderDelegate JsonFormatReaderDelegate } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private JsonFormatClassWriterDelegate CreateJsonFormatWriterDelegate() { return new ReflectionJsonFormatWriter().ReflectionWriteClass; @@ -65,7 +65,7 @@ private JsonFormatClassWriterDelegate CreateJsonFormatWriterDelegate() internal JsonFormatClassWriterDelegate JsonFormatWriterDelegate { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_helper.JsonFormatWriterDelegate == null) @@ -99,7 +99,7 @@ internal JsonFormatClassWriterDelegate JsonFormatWriterDelegate private ClassDataContract TraditionalClassDataContract => _helper.TraditionalClassDataContract; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson? context) { jsonReader.Read(); @@ -108,7 +108,7 @@ internal JsonFormatClassWriterDelegate JsonFormatWriterDelegate return o; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteJsonValueCore(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson? context, RuntimeTypeHandle declaredTypeHandle) { Debug.Assert(context != null); @@ -124,7 +124,7 @@ private sealed class JsonClassDataContractCriticalHelper : JsonDataContractCriti private readonly ClassDataContract _traditionalClassDataContract; private readonly string _typeName; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonClassDataContractCriticalHelper(ClassDataContract traditionalDataContract) : base(traditionalDataContract) { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonCollectionDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonCollectionDataContract.cs index 5790dd3892e370..8fe2e96c10c4a6 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonCollectionDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonCollectionDataContract.cs @@ -14,14 +14,14 @@ internal sealed class JsonCollectionDataContract : JsonDataContract { private readonly JsonCollectionDataContractCriticalHelper _helper; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonCollectionDataContract(CollectionDataContract traditionalDataContract) : base(new JsonCollectionDataContractCriticalHelper(traditionalDataContract)) { _helper = (base.Helper as JsonCollectionDataContractCriticalHelper)!; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private JsonFormatCollectionReaderDelegate CreateJsonFormatReaderDelegate() { return new ReflectionJsonCollectionReader().ReflectionReadCollection; @@ -29,7 +29,7 @@ private JsonFormatCollectionReaderDelegate CreateJsonFormatReaderDelegate() internal JsonFormatCollectionReaderDelegate JsonFormatReaderDelegate { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_helper.JsonFormatReaderDelegate == null) @@ -57,7 +57,7 @@ internal JsonFormatCollectionReaderDelegate JsonFormatReaderDelegate } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private JsonFormatGetOnlyCollectionReaderDelegate CreateJsonFormatGetOnlyReaderDelegate() { return new ReflectionJsonCollectionReader().ReflectionReadGetOnlyCollection; @@ -65,7 +65,7 @@ private JsonFormatGetOnlyCollectionReaderDelegate CreateJsonFormatGetOnlyReaderD internal JsonFormatGetOnlyCollectionReaderDelegate JsonFormatGetOnlyReaderDelegate { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_helper.JsonFormatGetOnlyReaderDelegate == null) @@ -99,7 +99,7 @@ internal JsonFormatGetOnlyCollectionReaderDelegate JsonFormatGetOnlyReaderDelega } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private JsonFormatCollectionWriterDelegate CreateJsonFormatWriterDelegate() { return new ReflectionJsonFormatWriter().ReflectionWriteCollection; @@ -108,7 +108,7 @@ private JsonFormatCollectionWriterDelegate CreateJsonFormatWriterDelegate() internal JsonFormatCollectionWriterDelegate JsonFormatWriterDelegate { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_helper.JsonFormatWriterDelegate == null) @@ -138,7 +138,7 @@ internal JsonFormatCollectionWriterDelegate JsonFormatWriterDelegate private CollectionDataContract TraditionalCollectionDataContract => _helper.TraditionalCollectionDataContract; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson? context) { Debug.Assert(context != null); @@ -159,7 +159,7 @@ internal JsonFormatCollectionWriterDelegate JsonFormatWriterDelegate return o; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteJsonValueCore(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson? context, RuntimeTypeHandle declaredTypeHandle) { Debug.Assert(context != null); @@ -175,7 +175,7 @@ private sealed class JsonCollectionDataContractCriticalHelper : JsonDataContract private JsonFormatCollectionWriterDelegate? _jsonFormatWriterDelegate; private readonly CollectionDataContract _traditionalCollectionDataContract; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonCollectionDataContractCriticalHelper(CollectionDataContract traditionalDataContract) : base(traditionalDataContract) { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonDataContract.cs index a638ff086e3620..472413f221b880 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonDataContract.cs @@ -15,7 +15,7 @@ internal class JsonDataContract { private readonly JsonDataContractCriticalHelper _helper; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected JsonDataContract(DataContract traditionalDataContract) { _helper = new JsonDataContractCriticalHelper(traditionalDataContract); @@ -62,13 +62,13 @@ internal static JsonReadWriteDelegates GetReadWriteDelegatesFromGeneratedAssembl return result; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public static JsonDataContract GetJsonDataContract(DataContract traditionalDataContract) { return JsonDataContractCriticalHelper.GetJsonDataContract(traditionalDataContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public object? ReadJsonValue(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson? context) { PushKnownDataContracts(context); @@ -77,13 +77,13 @@ public static JsonDataContract GetJsonDataContract(DataContract traditionalDataC return deserializedObject; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public virtual object? ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson? context) { return TraditionalDataContract.ReadXmlValue(jsonReader, context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void WriteJsonValue(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson? context, RuntimeTypeHandle declaredTypeHandle) { PushKnownDataContracts(context); @@ -91,7 +91,7 @@ public void WriteJsonValue(XmlWriterDelegator jsonWriter, object obj, XmlObjectS PopKnownDataContracts(context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public virtual void WriteJsonValueCore(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson? context, RuntimeTypeHandle declaredTypeHandle) { TraditionalDataContract.WriteXmlValue(jsonWriter, obj, context); @@ -148,7 +148,7 @@ internal class JsonDataContractCriticalHelper private readonly DataContract _traditionalDataContract; private readonly string _typeName; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal JsonDataContractCriticalHelper(DataContract traditionalDataContract) { _traditionalDataContract = traditionalDataContract; @@ -162,7 +162,7 @@ internal JsonDataContractCriticalHelper(DataContract traditionalDataContract) internal virtual string TypeName => _typeName; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public static JsonDataContract GetJsonDataContract(DataContract traditionalDataContract) { int id = JsonDataContractCriticalHelper.GetId(traditionalDataContract.UnderlyingType.TypeHandle); @@ -208,7 +208,7 @@ internal static int GetId(RuntimeTypeHandle typeHandle) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static JsonDataContract CreateJsonDataContract(int id, DataContract traditionalDataContract) { lock (s_createDataContractLock) @@ -272,7 +272,7 @@ private static JsonDataContract CreateJsonDataContract(int id, DataContract trad } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void AddCollectionItemContractsToKnownDataContracts() { if (_traditionalDataContract.KnownDataContracts != null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonEnumDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonEnumDataContract.cs index 7fe0a429c05fe2..726eafe2ab0612 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonEnumDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonEnumDataContract.cs @@ -9,7 +9,7 @@ internal sealed class JsonEnumDataContract : JsonDataContract { private readonly JsonEnumDataContractCriticalHelper _helper; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonEnumDataContract(EnumDataContract traditionalDataContract) : base(new JsonEnumDataContractCriticalHelper(traditionalDataContract)) { @@ -18,7 +18,7 @@ public JsonEnumDataContract(EnumDataContract traditionalDataContract) public bool IsULong => _helper.IsULong; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson? context) { object enumValue; @@ -38,7 +38,7 @@ public JsonEnumDataContract(EnumDataContract traditionalDataContract) return enumValue; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteJsonValueCore(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson? context, RuntimeTypeHandle declaredTypeHandle) { if (IsULong) @@ -55,7 +55,7 @@ private sealed class JsonEnumDataContractCriticalHelper : JsonDataContractCritic { private readonly bool _isULong; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonEnumDataContractCriticalHelper(EnumDataContract traditionalEnumDataContract) : base(traditionalEnumDataContract) { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatGeneratorStatics.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatGeneratorStatics.cs index 46184931f01b16..90d894e7d176b5 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatGeneratorStatics.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatGeneratorStatics.cs @@ -116,7 +116,7 @@ public static MethodInfo GetCurrentMethod } public static MethodInfo GetItemContractMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_getItemContractMethod == null) @@ -129,7 +129,7 @@ public static MethodInfo GetItemContractMethod } public static MethodInfo GetJsonDataContractMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_getJsonDataContractMethod == null) @@ -142,7 +142,7 @@ public static MethodInfo GetJsonDataContractMethod } public static MethodInfo GetJsonMemberIndexMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_getJsonMemberIndexMethod == null) @@ -155,7 +155,7 @@ public static MethodInfo GetJsonMemberIndexMethod } public static MethodInfo GetRevisedItemContractMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_getRevisedItemContractMethod == null) @@ -168,7 +168,7 @@ public static MethodInfo GetRevisedItemContractMethod } public static MethodInfo GetUninitializedObjectMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_getUninitializedObjectMethod == null) @@ -279,7 +279,7 @@ public static MethodInfo OnDeserializationMethod public static MethodInfo ReadJsonValueMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_readJsonValueMethod == null) @@ -399,7 +399,7 @@ public static MethodInfo WriteEndElementMethod } public static MethodInfo WriteJsonISerializableMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_writeJsonISerializableMethod == null) @@ -424,7 +424,7 @@ public static MethodInfo WriteJsonNameWithMappingMethod } public static MethodInfo WriteJsonValueMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_writeJsonValueMethod == null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatReaderGenerator.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatReaderGenerator.cs index a43c4f5e39bee0..68a5ddb216c8ec 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatReaderGenerator.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatReaderGenerator.cs @@ -29,19 +29,19 @@ public JsonFormatReaderGenerator() _helper = new CriticalHelper(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonFormatClassReaderDelegate GenerateClassReader(ClassDataContract classContract) { return _helper.GenerateClassReader(classContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonFormatCollectionReaderDelegate GenerateCollectionReader(CollectionDataContract collectionContract) { return _helper.GenerateCollectionReader(collectionContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonFormatGetOnlyCollectionReaderDelegate GenerateGetOnlyCollectionReader(CollectionDataContract collectionContract) { return _helper.GenerateGetOnlyCollectionReader(collectionContract); @@ -58,7 +58,7 @@ private sealed class CriticalHelper private ArgBuilder? _collectionContractArg; private ArgBuilder _emptyDictionaryStringArg = null!; // initialized in InitArgs - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonFormatClassReaderDelegate GenerateClassReader(ClassDataContract classContract) { _ilg = new CodeGenerator(); @@ -120,7 +120,7 @@ public JsonFormatClassReaderDelegate GenerateClassReader(ClassDataContract class return (JsonFormatClassReaderDelegate)_ilg.EndMethod(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonFormatCollectionReaderDelegate GenerateCollectionReader(CollectionDataContract collectionContract) { _ilg = GenerateCollectionReaderHelper(collectionContract, false /*isGetOnlyCollection*/); @@ -130,7 +130,7 @@ public JsonFormatCollectionReaderDelegate GenerateCollectionReader(CollectionDat return (JsonFormatCollectionReaderDelegate)_ilg.EndMethod(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonFormatGetOnlyCollectionReaderDelegate GenerateGetOnlyCollectionReader(CollectionDataContract collectionContract) { _ilg = GenerateCollectionReaderHelper(collectionContract, true /*isGetOnlyCollection*/); @@ -189,7 +189,7 @@ private void InitArgs() _memberNamesArg = _ilg.GetArg(3); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void CreateObject(ClassDataContract classContract) { _objectType = classContract.UnderlyingType; @@ -272,7 +272,7 @@ private bool InvokeFactoryMethod(ClassDataContract classContract) return false; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ReadClass(ClassDataContract classContract) { if (classContract.HasExtensionData) @@ -297,7 +297,7 @@ private void ReadClass(ClassDataContract classContract) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ReadMembers(ClassDataContract classContract, LocalBuilder? extensionDataLocal) { int memberCount = classContract.MemberNames!.Length; @@ -345,7 +345,7 @@ private void ReadMembers(ClassDataContract classContract, LocalBuilder? extensio _ilg.MarkLabel(endOfTypeLabel); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private int ReadMembers(ClassDataContract classContract, BitFlagsGenerator expectedElements, Label[] memberLabels, Label throwDuplicateMemberLabel, LocalBuilder memberIndexLocal) { @@ -439,7 +439,7 @@ private void ResetExpectedElements(BitFlagsGenerator expectedElements, int index expectedElements.Store(index, false); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ReadISerializable(ClassDataContract classContract) { ConstructorInfo? ctor = classContract.UnderlyingType.GetConstructor(Globals.ScanAllMembers, JsonFormatGeneratorStatics.SerInfoCtorArgs); @@ -453,7 +453,7 @@ private void ReadISerializable(ClassDataContract classContract) _ilg.Call(ctor); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private LocalBuilder ReadValue(Type type, string name) { LocalBuilder value = _ilg.DeclareLocal(type, "valueRead"); @@ -544,7 +544,7 @@ private LocalBuilder ReadValue(Type type, string name) return value; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void InternalDeserialize(LocalBuilder value, Type type, string name) { _ilg.Load(_contextArg); @@ -561,7 +561,7 @@ private void InternalDeserialize(LocalBuilder value, Type type, string name) _ilg.Stloc(value); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void WrapNullableObject(LocalBuilder innerValue, LocalBuilder outerValue, int nullables) { Type innerType = innerValue.LocalType, outerType = outerValue.LocalType; @@ -576,7 +576,7 @@ private void WrapNullableObject(LocalBuilder innerValue, LocalBuilder outerValue _ilg.Call(outerType.GetConstructor(new Type[] { innerType })!); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ReadCollection(CollectionDataContract collectionContract) { Type type = collectionContract.UnderlyingType; @@ -700,13 +700,13 @@ private void ReadCollection(CollectionDataContract collectionContract) { _ilg.EndIf(); } - } - [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", Justification = "The call to MakeGenericMethod is safe due to the fact that EnsureArraySizeMethod and TrimArraySizeMethod are not annotated.")] - private MethodInfo MakeGenericMethod(MethodInfo method, Type itemType) => method.MakeGenericMethod(itemType); + static MethodInfo MakeGenericMethod(MethodInfo method, Type itemType) => method.MakeGenericMethod(itemType); + } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ReadSimpleDictionary(CollectionDataContract collectionContract, Type keyValueType) { Type[] keyValueTypes = keyValueType.GetGenericArguments(); @@ -799,7 +799,7 @@ private void ReadSimpleDictionary(CollectionDataContract collectionContract, Typ } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ReadGetOnlyCollection(CollectionDataContract collectionContract) { Type type = collectionContract.UnderlyingType; @@ -888,7 +888,7 @@ private void ReadGetOnlyCollection(CollectionDataContract collectionContract) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private bool TryReadPrimitiveArray(Type itemType) { PrimitiveDataContract? primitiveContract = PrimitiveDataContract.GetPrimitiveDataContract(itemType); @@ -939,7 +939,7 @@ private bool TryReadPrimitiveArray(Type itemType) return false; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private LocalBuilder ReadCollectionItem(CollectionDataContract collectionContract, Type itemType) { if (collectionContract.Kind == CollectionKind.Dictionary || collectionContract.Kind == CollectionKind.GenericDictionary) @@ -962,7 +962,7 @@ private LocalBuilder ReadCollectionItem(CollectionDataContract collectionContrac } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void StoreCollectionValue(LocalBuilder collection, LocalBuilder value, CollectionDataContract collectionContract) { if (collectionContract.Kind == CollectionKind.GenericDictionary || collectionContract.Kind == CollectionKind.Dictionary) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatWriterGenerator.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatWriterGenerator.cs index c9b50bff29181c..c7205118d409cd 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatWriterGenerator.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatWriterGenerator.cs @@ -27,13 +27,13 @@ public JsonFormatWriterGenerator() _helper = new CriticalHelper(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal JsonFormatClassWriterDelegate GenerateClassWriter(ClassDataContract classContract) { return _helper.GenerateClassWriter(classContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal JsonFormatCollectionWriterDelegate GenerateCollectionWriter(CollectionDataContract collectionContract) { return _helper.GenerateCollectionWriter(collectionContract); @@ -60,7 +60,7 @@ private sealed class CriticalHelper private int _typeIndex = 1; private int _childElementIndex; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal JsonFormatClassWriterDelegate GenerateClassWriter(ClassDataContract classContract) { _ilg = new CodeGenerator(); @@ -86,7 +86,7 @@ internal JsonFormatClassWriterDelegate GenerateClassWriter(ClassDataContract cla return (JsonFormatClassWriterDelegate)_ilg.EndMethod(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal JsonFormatCollectionWriterDelegate GenerateCollectionWriter(CollectionDataContract collectionContract) { _ilg = new CodeGenerator(); @@ -123,7 +123,7 @@ private void BeginMethod(CodeGenerator ilg, string methodName, Type delegateType ilg.BeginMethod(dynamicMethod, delegateType, methodName, paramTypes, allowPrivateMemberAccess); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void InitArgs(Type objType) { _xmlWriterArg = _ilg.GetArg(0); @@ -183,7 +183,7 @@ private void InvokeOnSerialized(ClassDataContract classContract) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void WriteClass(ClassDataContract classContract) { InvokeOnSerializing(classContract); @@ -212,7 +212,7 @@ private void WriteClass(ClassDataContract classContract) InvokeOnSerialized(classContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private int WriteMembers(ClassDataContract classContract, LocalBuilder? extensionDataLocal, ClassDataContract derivedMostClassContract) { int memberCount = (classContract.BaseContract == null) ? 0 : @@ -287,7 +287,7 @@ private LocalBuilder LoadMemberValue(DataMember member) return memberValue; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void WriteCollection(CollectionDataContract collectionContract) { LocalBuilder itemName = _ilg.DeclareLocal(typeof(XmlDictionaryString), "itemName"); @@ -488,13 +488,13 @@ private void WriteCollection(CollectionDataContract collectionContract) _ilg.EndIf(); } } - } - [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", Justification = "The call to MakeGenericMethod is safe due to the fact that IncrementCollectionCountGeneric is not annotated.")] - private MethodInfo MakeIncrementCollectionCountGenericMethod(Type itemType) => XmlFormatGeneratorStatics.IncrementCollectionCountGenericMethod.MakeGenericMethod(itemType); + static MethodInfo MakeIncrementCollectionCountGenericMethod(Type itemType) => XmlFormatGeneratorStatics.IncrementCollectionCountGenericMethod.MakeGenericMethod(itemType); + } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private bool TryWritePrimitive(Type type, LocalBuilder? value, MemberInfo? memberInfo, LocalBuilder? arrayItemIndex, LocalBuilder? name, int nameIndex) { PrimitiveDataContract? primitiveContract = PrimitiveDataContract.GetPrimitiveDataContract(type); @@ -541,7 +541,7 @@ private bool TryWritePrimitive(Type type, LocalBuilder? value, MemberInfo? membe return true; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private bool TryWritePrimitiveArray(Type type, Type itemType, LocalBuilder value, LocalBuilder itemName) { PrimitiveDataContract? primitiveContract = PrimitiveDataContract.GetPrimitiveDataContract(itemType); @@ -607,7 +607,7 @@ private void WriteObjectAttribute() JsonGlobals.objectString /* value */); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void WriteValue(LocalBuilder memberValue) { Type memberType = memberValue.LocalType; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonObjectDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonObjectDataContract.cs index 2da99f1eff5d2a..40e34203e1559a 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonObjectDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonObjectDataContract.cs @@ -10,13 +10,13 @@ namespace System.Runtime.Serialization.Json { internal sealed class JsonObjectDataContract : JsonDataContract { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonObjectDataContract(DataContract traditionalDataContract) : base(traditionalDataContract) { } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson? context) { object? obj; @@ -56,7 +56,7 @@ public JsonObjectDataContract(DataContract traditionalDataContract) return obj; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteJsonValueCore(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson? context, RuntimeTypeHandle declaredTypeHandle) { jsonWriter.WriteAttributeString(null, JsonGlobals.typeString, null, JsonGlobals.objectString); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonQNameDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonQNameDataContract.cs index aa6d2f137a54cc..8bc4a2d1f50424 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonQNameDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonQNameDataContract.cs @@ -12,13 +12,13 @@ namespace System.Runtime.Serialization.Json { internal sealed class JsonQNameDataContract : JsonDataContract { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonQNameDataContract(QNameDataContract traditionalQNameDataContract) : base(traditionalQNameDataContract) { } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson? context) { if (context == null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonStringDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonStringDataContract.cs index 19c1f28182829f..e65c58c9caed53 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonStringDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonStringDataContract.cs @@ -12,13 +12,13 @@ namespace System.Runtime.Serialization.Json { internal sealed class JsonStringDataContract : JsonDataContract { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonStringDataContract(StringDataContract traditionalStringDataContract) : base(traditionalStringDataContract) { } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson? context) { if (context == null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonUriDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonUriDataContract.cs index 7cc8601bab92f3..bd4b68daf4103a 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonUriDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonUriDataContract.cs @@ -7,13 +7,13 @@ namespace System.Runtime.Serialization.Json { internal sealed class JsonUriDataContract : JsonDataContract { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonUriDataContract(UriDataContract traditionalUriDataContract) : base(traditionalUriDataContract) { } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson? context) { if (context == null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonXmlDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonXmlDataContract.cs index 4fc9ac93da4ccd..cf5bf09eba9127 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonXmlDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonXmlDataContract.cs @@ -11,13 +11,13 @@ namespace System.Runtime.Serialization.Json { internal sealed class JsonXmlDataContract : JsonDataContract { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public JsonXmlDataContract(XmlDataContract traditionalXmlDataContract) : base(traditionalXmlDataContract) { } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson? context) { string xmlContent = jsonReader.ReadElementContentAsString(); @@ -43,7 +43,7 @@ public JsonXmlDataContract(XmlDataContract traditionalXmlDataContract) return xmlValue; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteJsonValueCore(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson? context, RuntimeTypeHandle declaredTypeHandle) { DataContractSerializer dataContractSerializer = new DataContractSerializer(Type.GetTypeFromHandle(declaredTypeHandle), diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/ReflectionJsonFormatReader.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/ReflectionJsonFormatReader.cs index e6bb2e9b22504a..4161f53a29aece 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/ReflectionJsonFormatReader.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/ReflectionJsonFormatReader.cs @@ -26,7 +26,7 @@ public ReflectionJsonClassReader(ClassDataContract classDataContract) _reflectionReader = new ReflectionJsonReader(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public object ReflectionReadClass(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContextComplexJson? context, XmlDictionaryString emptyDictionaryString, XmlDictionaryString[]? memberNames) { Debug.Assert(_classContract != null); @@ -38,13 +38,13 @@ internal sealed class ReflectionJsonCollectionReader { private readonly ReflectionReader _reflectionReader = new ReflectionJsonReader(); - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public object ReflectionReadCollection(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContextComplexJson context, XmlDictionaryString emptyDictionaryString, XmlDictionaryString itemName, CollectionDataContract collectionContract) { return _reflectionReader.ReflectionReadCollection(xmlReader, context, itemName, emptyDictionaryString/*itemNamespace*/, collectionContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void ReflectionReadGetOnlyCollection(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContextComplexJson context, XmlDictionaryString emptyDictionaryString, XmlDictionaryString itemName, CollectionDataContract collectionContract) { _reflectionReader.ReflectionReadGetOnlyCollection(xmlReader, context, itemName, emptyDictionaryString/*itemNamespace*/, collectionContract); @@ -53,7 +53,7 @@ public void ReflectionReadGetOnlyCollection(XmlReaderDelegator xmlReader, XmlObj internal sealed class ReflectionJsonReader : ReflectionReader { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected override void ReflectionReadMembers(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString[] memberNames, XmlDictionaryString[]? memberNamespaces, ClassDataContract classContract, ref object obj) { var jsonContext = context as XmlObjectSerializerReadContextComplexJson; @@ -107,7 +107,7 @@ protected override string GetCollectionContractNamespace(CollectionDataContract return string.Empty; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected override object? ReflectionReadDictionaryItem(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract collectionContract) { var jsonContext = context as XmlObjectSerializerReadContextComplexJson; @@ -119,7 +119,7 @@ protected override string GetCollectionContractNamespace(CollectionDataContract return DataContractJsonSerializer.ReadJsonValue(itemContract, xmlReader, jsonContext); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected override bool ReflectionReadSpecialCollection(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract collectionContract, object? resultCollection) { var jsonContext = context as XmlObjectSerializerReadContextComplexJson; @@ -135,7 +135,7 @@ protected override bool ReflectionReadSpecialCollection(XmlReaderDelegator xmlRe return false; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ReadSimpleDictionary(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract collectionContract, Type keyValueType, object? dictionary) { Type[] keyValueTypes = keyValueType.GetGenericArguments(); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/ReflectionJsonFormatWriter.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/ReflectionJsonFormatWriter.cs index b4949bff24306f..10aff105f6b92f 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/ReflectionJsonFormatWriter.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/ReflectionJsonFormatWriter.cs @@ -18,13 +18,13 @@ internal sealed class ReflectionJsonFormatWriter { private readonly ReflectionJsonClassWriter _reflectionClassWriter = new ReflectionJsonClassWriter(); - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void ReflectionWriteClass(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContextComplexJson context, ClassDataContract classContract, XmlDictionaryString[]? memberNames) { _reflectionClassWriter.ReflectionWriteClass(xmlWriter, obj, context, classContract, memberNames); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void ReflectionWriteCollection(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContextComplexJson context, CollectionDataContract collectionContract) { JsonWriterDelegator? jsonWriter = xmlWriter as JsonWriterDelegator; @@ -137,7 +137,7 @@ private void ReflectionWriteObjectAttribute(XmlWriterDelegator xmlWriter) value: JsonGlobals.objectString); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private bool ReflectionTryWritePrimitiveArray(JsonWriterDelegator jsonWriter, object obj, Type underlyingType, Type itemType, XmlDictionaryString collectionItemName) { PrimitiveDataContract? primitiveContract = PrimitiveDataContract.GetPrimitiveDataContract(itemType); @@ -194,7 +194,7 @@ private void ReflectionWriteArrayAttribute(XmlWriterDelegator xmlWriter) internal sealed class ReflectionJsonClassWriter : ReflectionClassWriter { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected override int ReflectionWriteMembers(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract, ClassDataContract derivedMostClassContract, int childElementIndex, XmlDictionaryString[]? memberNames) { Debug.Assert(memberNames != null); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerReadContextComplexJson.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerReadContextComplexJson.cs index 5dd21b83c96912..f66422234e59f3 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerReadContextComplexJson.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerReadContextComplexJson.cs @@ -34,13 +34,13 @@ internal static XmlObjectSerializerReadContextComplexJson CreateContext(DataCont return new XmlObjectSerializerReadContextComplexJson(serializer, rootTypeDataContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected override object? ReadDataContractValue(DataContract dataContract, XmlReaderDelegator reader) { return DataContractJsonSerializerImpl.ReadJsonValue(dataContract, reader, this); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public int GetJsonMemberIndex(XmlReaderDelegator xmlReader, XmlDictionaryString[] memberNames, int memberIndex, ExtensionDataObject? extensionData) { int length = memberNames.Length; @@ -239,7 +239,7 @@ internal static XmlQualifiedName ParseQualifiedName(string qname) return new XmlQualifiedName(name, ns); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override DataContract GetDataContract(RuntimeTypeHandle typeHandle, Type? type) { DataContract dataContract = base.GetDataContract(typeHandle, type); @@ -247,7 +247,7 @@ internal override DataContract GetDataContract(RuntimeTypeHandle typeHandle, Typ return dataContract; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override DataContract GetDataContractSkipValidation(int typeId, RuntimeTypeHandle typeHandle, Type? type) { DataContract dataContract = base.GetDataContractSkipValidation(typeId, typeHandle, type); @@ -255,7 +255,7 @@ internal override DataContract GetDataContractSkipValidation(int typeId, Runtime return dataContract; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override DataContract GetDataContract(int id, RuntimeTypeHandle typeHandle) { DataContract dataContract = base.GetDataContract(id, typeHandle); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerWriteContextComplexJson.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerWriteContextComplexJson.cs index 1dac5b3ca8db00..6519fba2a7b89d 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerWriteContextComplexJson.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerWriteContextComplexJson.cs @@ -101,7 +101,7 @@ internal static string TruncateDefaultDataContractNamespace(string dataContractN return dataContractNamespace; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected override bool WriteTypeInfo(XmlWriterDelegator writer, DataContract contract, DataContract declaredContract) { if (!((object.ReferenceEquals(contract.Name, declaredContract.Name) && @@ -152,7 +152,7 @@ private void WriteTypeInfo(XmlWriterDelegator writer, string typeInformation) writer.WriteAttributeString(null, JsonGlobals.serverTypeString, null, typeInformation); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected override void WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, object obj, RuntimeTypeHandle declaredTypeHandle) { JsonDataContract jsonDataContract = JsonDataContract.GetJsonDataContract(dataContract); @@ -174,7 +174,7 @@ internal XmlDictionaryString CollectionItemName get { return JsonGlobals.itemDictionaryString; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected override void SerializeWithXsiType(XmlWriterDelegator xmlWriter, object obj, RuntimeTypeHandle objectTypeHandle, Type? objectType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle, Type declaredType) { DataContract dataContract; @@ -206,7 +206,7 @@ protected override void SerializeWithXsiType(XmlWriterDelegator xmlWriter, objec SerializeAndVerifyType(dataContract, xmlWriter, obj, verifyKnownType, declaredType.TypeHandle, declaredType); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void HandleCollectionAssignedToObject(Type declaredType, ref DataContract dataContract, ref object obj, ref bool verifyKnownType) { if ((declaredType != dataContract.UnderlyingType) && (dataContract is CollectionDataContract)) @@ -241,7 +241,7 @@ private void HandleCollectionAssignedToObject(Type declaredType, ref DataContrac } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void SerializeWithXsiTypeAtTopLevel(DataContract dataContract, XmlWriterDelegator xmlWriter, object obj, RuntimeTypeHandle originalDeclaredTypeHandle, Type graphType) { bool verifyKnownType = false; @@ -262,7 +262,7 @@ internal override void SerializeWithXsiTypeAtTopLevel(DataContract dataContract, SerializeAndVerifyType(dataContract, xmlWriter, obj, verifyKnownType, declaredType.TypeHandle, declaredType); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void VerifyType(DataContract dataContract, Type declaredType) { bool knownTypesAddedInCurrentScope = false; @@ -289,7 +289,7 @@ internal static void WriteJsonNameWithMapping(XmlWriterDelegator xmlWriter, XmlD xmlWriter.WriteAttributeString(null, JsonGlobals.itemString, null, memberNames[index].Value); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void WriteExtensionDataTypeInfo(XmlWriterDelegator xmlWriter, IDataNode dataNode) { Type dataType = dataNode.DataType; @@ -332,7 +332,7 @@ internal static void VerifyObjectCompatibilityWithInterface(DataContract contrac } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void WriteJsonISerializable(XmlWriterDelegator xmlWriter, ISerializable obj) { Type objType = obj.GetType(); @@ -349,7 +349,7 @@ internal void WriteJsonISerializable(XmlWriterDelegator xmlWriter, ISerializable } [return: NotNullIfNotNull("oldItemContract")] - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static DataContract? GetRevisedItemContract(DataContract oldItemContract) { if ((oldItemContract != null) && @@ -361,7 +361,7 @@ internal void WriteJsonISerializable(XmlWriterDelegator xmlWriter, ISerializable return oldItemContract; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override DataContract GetDataContract(RuntimeTypeHandle typeHandle, Type? type) { DataContract dataContract = base.GetDataContract(typeHandle, type); @@ -369,7 +369,7 @@ internal override DataContract GetDataContract(RuntimeTypeHandle typeHandle, Typ return dataContract; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override DataContract GetDataContractSkipValidation(int typeId, RuntimeTypeHandle typeHandle, Type? type) { DataContract dataContract = base.GetDataContractSkipValidation(typeId, typeHandle, type); @@ -377,7 +377,7 @@ internal override DataContract GetDataContractSkipValidation(int typeId, Runtime return dataContract; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override DataContract GetDataContract(int id, RuntimeTypeHandle typeHandle) { DataContract dataContract = base.GetDataContract(id, typeHandle); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/KnownTypeDataContractResolver.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/KnownTypeDataContractResolver.cs index 5279bf467398e2..6efa35ada1c54c 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/KnownTypeDataContractResolver.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/KnownTypeDataContractResolver.cs @@ -18,7 +18,7 @@ internal KnownTypeDataContractResolver(XmlObjectSerializerContext context) _context = context; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override bool TryResolveType(Type type, Type? declaredType, DataContractResolver knownTypeResolver, out XmlDictionaryString? typeName, out XmlDictionaryString? typeNamespace) { if (type == null) @@ -49,7 +49,7 @@ public override bool TryResolveType(Type type, Type? declaredType, DataContractR } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override Type? ResolveName(string typeName, string? typeNamespace, Type? declaredType, DataContractResolver knownTypeResolver) { if (typeName == null || typeNamespace == null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs index 08a3c9f4e1a19b..fea34e7456af67 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs @@ -36,13 +36,13 @@ protected PrimitiveDataContract( _helper = (base.Helper as PrimitiveDataContractCriticalHelper)!; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static PrimitiveDataContract? GetPrimitiveDataContract(Type type) { return DataContract.GetBuiltInDataContract(type) as PrimitiveDataContract; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static PrimitiveDataContract? GetPrimitiveDataContract(string name, string ns) { return DataContract.GetBuiltInDataContract(name, ns) as PrimitiveDataContract; @@ -69,7 +69,7 @@ public override XmlDictionaryString? TopLevelElementNamespace internal MethodInfo XmlFormatWriterMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_helper.XmlFormatWriterMethod == null) @@ -85,7 +85,7 @@ internal MethodInfo XmlFormatWriterMethod internal MethodInfo XmlFormatContentWriterMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (_helper.XmlFormatContentWriterMethod == null) @@ -111,7 +111,7 @@ internal MethodInfo XmlFormatReaderMethod } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext? context) { xmlWriter.WriteAnyType(obj); @@ -184,20 +184,20 @@ internal CharDataContract(XmlDictionaryString name, XmlDictionaryString ns) : ba internal override string WriteMethodName { get { return "WriteChar"; } } internal override string ReadMethodName { get { return "ReadElementContentAsChar"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteChar((char)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsChar() : HandleReadValue(reader.ReadElementContentAsChar(), context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteChar((char)obj!, name, ns); @@ -218,20 +218,20 @@ public BooleanDataContract() : base(typeof(bool), DictionaryGlobals.BooleanLocal internal override string WriteMethodName { get { return "WriteBoolean"; } } internal override string ReadMethodName { get { return "ReadElementContentAsBoolean"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteBoolean((bool)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsBoolean() : HandleReadValue(reader.ReadElementContentAsBoolean(), context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteBoolean((bool)obj!, name, ns); @@ -247,20 +247,20 @@ public SignedByteDataContract() : base(typeof(sbyte), DictionaryGlobals.SignedBy internal override string WriteMethodName { get { return "WriteSignedByte"; } } internal override string ReadMethodName { get { return "ReadElementContentAsSignedByte"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteSignedByte((sbyte)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsSignedByte() : HandleReadValue(reader.ReadElementContentAsSignedByte(), context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteSignedByte((sbyte)obj!, name, ns); @@ -276,20 +276,20 @@ public UnsignedByteDataContract() : base(typeof(byte), DictionaryGlobals.Unsigne internal override string WriteMethodName { get { return "WriteUnsignedByte"; } } internal override string ReadMethodName { get { return "ReadElementContentAsUnsignedByte"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteUnsignedByte((byte)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsUnsignedByte() : HandleReadValue(reader.ReadElementContentAsUnsignedByte(), context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteUnsignedByte((byte)obj!, name, ns); @@ -305,20 +305,20 @@ public ShortDataContract() : base(typeof(short), DictionaryGlobals.ShortLocalNam internal override string WriteMethodName { get { return "WriteShort"; } } internal override string ReadMethodName { get { return "ReadElementContentAsShort"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteShort((short)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsShort() : HandleReadValue(reader.ReadElementContentAsShort(), context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteShort((short)obj!, name, ns); @@ -334,20 +334,20 @@ public UnsignedShortDataContract() : base(typeof(ushort), DictionaryGlobals.Unsi internal override string WriteMethodName { get { return "WriteUnsignedShort"; } } internal override string ReadMethodName { get { return "ReadElementContentAsUnsignedShort"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteUnsignedShort((ushort)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsUnsignedShort() : HandleReadValue(reader.ReadElementContentAsUnsignedShort(), context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteUnsignedShort((ushort)obj!, name, ns); @@ -380,19 +380,19 @@ internal override string WriteMethodName } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { throw new NotImplementedException(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { throw new NotImplementedException(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { throw new NotImplementedException(); @@ -408,20 +408,20 @@ public IntDataContract() : base(typeof(int), DictionaryGlobals.IntLocalName, Dic internal override string WriteMethodName { get { return "WriteInt"; } } internal override string ReadMethodName { get { return "ReadElementContentAsInt"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteInt((int)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsInt() : HandleReadValue(reader.ReadElementContentAsInt(), context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteInt((int)obj!, name, ns); @@ -437,20 +437,20 @@ public UnsignedIntDataContract() : base(typeof(uint), DictionaryGlobals.Unsigned internal override string WriteMethodName { get { return "WriteUnsignedInt"; } } internal override string ReadMethodName { get { return "ReadElementContentAsUnsignedInt"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteUnsignedInt((uint)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsUnsignedInt() : HandleReadValue(reader.ReadElementContentAsUnsignedInt(), context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteUnsignedInt((uint)obj!, name, ns); @@ -470,20 +470,20 @@ internal LongDataContract(XmlDictionaryString name, XmlDictionaryString ns) : ba internal override string WriteMethodName { get { return "WriteLong"; } } internal override string ReadMethodName { get { return "ReadElementContentAsLong"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteLong((long)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsLong() : HandleReadValue(reader.ReadElementContentAsLong(), context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteLong((long)obj!, name, ns); @@ -524,20 +524,20 @@ public UnsignedLongDataContract() : base(typeof(ulong), DictionaryGlobals.Unsign internal override string WriteMethodName { get { return "WriteUnsignedLong"; } } internal override string ReadMethodName { get { return "ReadElementContentAsUnsignedLong"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteUnsignedLong((ulong)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsUnsignedLong() : HandleReadValue(reader.ReadElementContentAsUnsignedLong(), context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteUnsignedLong((ulong)obj!, name, ns); @@ -553,20 +553,20 @@ public FloatDataContract() : base(typeof(float), DictionaryGlobals.FloatLocalNam internal override string WriteMethodName { get { return "WriteFloat"; } } internal override string ReadMethodName { get { return "ReadElementContentAsFloat"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteFloat((float)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsFloat() : HandleReadValue(reader.ReadElementContentAsFloat(), context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteFloat((float)obj!, name, ns); @@ -582,20 +582,20 @@ public DoubleDataContract() : base(typeof(double), DictionaryGlobals.DoubleLocal internal override string WriteMethodName { get { return "WriteDouble"; } } internal override string ReadMethodName { get { return "ReadElementContentAsDouble"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteDouble((double)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsDouble() : HandleReadValue(reader.ReadElementContentAsDouble(), context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteDouble((double)obj!, name, ns); @@ -611,20 +611,20 @@ public DecimalDataContract() : base(typeof(decimal), DictionaryGlobals.DecimalLo internal override string WriteMethodName { get { return "WriteDecimal"; } } internal override string ReadMethodName { get { return "ReadElementContentAsDecimal"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteDecimal((decimal)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsDecimal() : HandleReadValue(reader.ReadElementContentAsDecimal(), context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteDecimal((decimal)obj!, name, ns); @@ -640,20 +640,20 @@ public DateTimeDataContract() : base(typeof(DateTime), DictionaryGlobals.DateTim internal override string WriteMethodName { get { return "WriteDateTime"; } } internal override string ReadMethodName { get { return "ReadElementContentAsDateTime"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteDateTime((DateTime)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsDateTime() : HandleReadValue(reader.ReadElementContentAsDateTime(), context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteDateTime((DateTime)obj!, name, ns); @@ -673,13 +673,13 @@ internal StringDataContract(XmlDictionaryString name, XmlDictionaryString ns) : internal override string WriteMethodName { get { return "WriteString"; } } internal override string ReadMethodName { get { return "ReadElementContentAsString"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteString((string)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { if (context == null) @@ -692,7 +692,7 @@ public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObj } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { context.WriteString(xmlWriter, (string?)obj, name, ns); @@ -808,13 +808,13 @@ public ByteArrayDataContract() : base(typeof(byte[]), DictionaryGlobals.ByteArra internal override string WriteMethodName { get { return "WriteBase64"; } } internal override string ReadMethodName { get { return "ReadElementContentAsBase64"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteBase64((byte[])obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { if (context == null) @@ -827,7 +827,7 @@ public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObj } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteStartElement(name, ns); @@ -845,13 +845,13 @@ public ObjectDataContract() : base(typeof(object), DictionaryGlobals.ObjectLocal internal override string WriteMethodName { get { return "WriteAnyType"; } } internal override string ReadMethodName { get { return "ReadElementContentAsAnyType"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { // write nothing } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { object obj; @@ -902,20 +902,20 @@ internal TimeSpanDataContract(XmlDictionaryString name, XmlDictionaryString ns) internal override string WriteMethodName { get { return "WriteTimeSpan"; } } internal override string ReadMethodName { get { return "ReadElementContentAsTimeSpan"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteTimeSpan((TimeSpan)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsTimeSpan() : HandleReadValue(reader.ReadElementContentAsTimeSpan(), context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator writer, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { writer.WriteTimeSpan((TimeSpan)obj!, name, ns); @@ -940,20 +940,20 @@ internal GuidDataContract(XmlDictionaryString name, XmlDictionaryString ns) : ba internal override string WriteMethodName { get { return "WriteGuid"; } } internal override string ReadMethodName { get { return "ReadElementContentAsGuid"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteGuid((Guid)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { return (context == null) ? reader.ReadElementContentAsGuid() : HandleReadValue(reader.ReadElementContentAsGuid(), context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator xmlWriter, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteGuid((Guid)obj!, name, ns); @@ -974,13 +974,13 @@ public UriDataContract() : base(typeof(Uri), DictionaryGlobals.UriLocalName, Dic internal override string WriteMethodName { get { return "WriteUri"; } } internal override string ReadMethodName { get { return "ReadElementContentAsUri"; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteUri((Uri)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { if (context == null) @@ -993,7 +993,7 @@ public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObj } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator writer, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { writer.WriteUri((Uri?)obj, name, ns); @@ -1014,13 +1014,13 @@ internal override bool IsPrimitive get { return false; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObjectSerializerWriteContext? context) { writer.WriteQName((XmlQualifiedName)obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator reader, XmlObjectSerializerReadContext? context) { if (context == null) @@ -1033,7 +1033,7 @@ public override void WriteXmlValue(XmlWriterDelegator writer, object obj, XmlObj } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlElement(XmlWriterDelegator writer, object? obj, XmlObjectSerializerWriteContext context, XmlDictionaryString name, XmlDictionaryString? ns) { context.WriteQName(writer, (XmlQualifiedName?)obj, name, ns); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionClassWriter.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionClassWriter.cs index 1aca720f1d6253..396f04faa702af 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionClassWriter.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionClassWriter.cs @@ -17,7 +17,7 @@ namespace System.Runtime.Serialization { internal abstract class ReflectionClassWriter { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void ReflectionWriteClass(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract, XmlDictionaryString[]? memberNames) { InvokeOnSerializing(obj, context, classContract); @@ -39,7 +39,7 @@ public void ReflectionWriteClass(XmlWriterDelegator xmlWriter, object obj, XmlOb InvokeOnSerialized(obj, context, classContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void ReflectionWriteValue(XmlWriterDelegator xmlWriter, XmlObjectSerializerWriteContext context, Type type, object? value, bool writeXsiType, PrimitiveDataContract? primitiveContractForParamType) { Type memberType = type; @@ -103,7 +103,7 @@ public void ReflectionWriteValue(XmlWriterDelegator xmlWriter, XmlObjectSerializ } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected abstract int ReflectionWriteMembers(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract, ClassDataContract derivedMostClassContract, int childElementIndex, XmlDictionaryString[]? memberNames); protected object? ReflectionGetMemberValue(object obj, DataMember dataMember) @@ -111,7 +111,7 @@ public void ReflectionWriteValue(XmlWriterDelegator xmlWriter, XmlObjectSerializ return dataMember.Getter(obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected bool ReflectionTryWritePrimitive(XmlWriterDelegator xmlWriter, XmlObjectSerializerWriteContext context, Type type, object? value, XmlDictionaryString name, XmlDictionaryString? ns, PrimitiveDataContract? primitiveContract) { if (primitiveContract == null || primitiveContract.UnderlyingType == Globals.TypeOfObject) @@ -159,7 +159,7 @@ private object ResolveAdapterType(object obj, ClassDataContract classContract) return obj; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ReflectionInternalSerialize(XmlWriterDelegator xmlWriter, XmlObjectSerializerWriteContext context, object obj, bool isDeclaredType, bool writeXsiType, Type memberType, bool isNullableOfT = false) { if (isNullableOfT) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs index 96077550fc88db..2a92a3ce0162cc 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs @@ -39,7 +39,7 @@ private static MethodInfo CollectionSetItemDelegateMethod } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public object ReflectionReadClass(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext? context, XmlDictionaryString[]? memberNames, XmlDictionaryString[]? memberNamespaces, ClassDataContract classContract) { Debug.Assert(context != null); @@ -70,7 +70,7 @@ public object ReflectionReadClass(XmlReaderDelegator xmlReader, XmlObjectSeriali return obj; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void ReflectionReadGetOnlyCollection(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString collectionItemName, XmlDictionaryString collectionItemNamespace, CollectionDataContract collectionContract) { object? resultCollection = context.GetCollectionMember(); @@ -92,13 +92,13 @@ public void ReflectionReadGetOnlyCollection(XmlReaderDelegator xmlReader, XmlObj } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public object ReflectionReadCollection(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString collectionItemName, XmlDictionaryString collectionItemNamespace, CollectionDataContract collectionContract) { return ReflectionReadCollectionCore(xmlReader, context, collectionItemName, collectionItemNamespace, collectionContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private object ReflectionReadCollectionCore(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString collectionItemName, XmlDictionaryString collectionItemNamespace, CollectionDataContract collectionContract) { bool isArray = (collectionContract.Kind == CollectionKind.Array); @@ -123,7 +123,7 @@ private object ReflectionReadCollectionCore(XmlReaderDelegator xmlReader, XmlObj return resultCollection; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private CollectionReadItemDelegate GetCollectionReadItemDelegate(CollectionDataContract collectionContract) { CollectionReadItemDelegate collectionReadItemDelegate; @@ -138,14 +138,14 @@ private CollectionReadItemDelegate GetCollectionReadItemDelegate(CollectionDataC return collectionReadItemDelegate; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] object? GetReadDictionaryItemDelegate(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract collectionContract, Type itemType, string itemName, string itemNs) { return ReflectionReadDictionaryItem(xmlReader, context, collectionContract); }; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private object ReadCollectionItems(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString collectionItemName, XmlDictionaryString collectionItemNamespace, CollectionDataContract collectionContract, object resultCollection, bool isReadOnlyCollection) { string itemName = GetCollectionContractItemName(collectionContract); @@ -191,15 +191,15 @@ private object ReadCollectionItems(XmlReaderDelegator xmlReader, XmlObjectSerial return resultCollection; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected abstract void ReflectionReadMembers(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString[] memberNames, XmlDictionaryString[]? memberNamespaces, ClassDataContract classContract, ref object obj); - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected abstract object? ReflectionReadDictionaryItem(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract collectionContract); protected abstract string GetCollectionContractItemName(CollectionDataContract collectionContract); protected abstract string GetCollectionContractNamespace(CollectionDataContract collectionContract); protected abstract string GetClassContractNamespace(ClassDataContract classContract); - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected virtual bool ReflectionReadSpecialCollection(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract collectionContract, object? resultCollection) { return false; @@ -217,7 +217,7 @@ protected int ReflectionGetMembers(ClassDataContract classContract, DataMember[] return memberCount; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected void ReflectionReadMember(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, ClassDataContract classContract, ref object obj, int memberIndex, DataMember[] members) { DataMember dataMember = members[memberIndex]; @@ -240,7 +240,7 @@ protected void ReflectionReadMember(XmlReaderDelegator xmlReader, XmlObjectSeria } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected object? ReflectionReadValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, Type type, string name, string ns, PrimitiveDataContract? primitiveContractForOriginalType = null) { object? value = null; @@ -267,7 +267,7 @@ protected void ReflectionReadMember(XmlReaderDelegator xmlReader, XmlObjectSeria return value; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private object? ReadItemOfPrimitiveType(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, Type type, string name, string ns, PrimitiveDataContract? primitiveContract, int nullables) { object? value; @@ -321,7 +321,7 @@ protected void ReflectionReadMember(XmlReaderDelegator xmlReader, XmlObjectSeria return value; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static object ReadISerializable(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, ClassDataContract classContract) { object obj; @@ -333,7 +333,7 @@ private static object ReadISerializable(XmlReaderDelegator xmlReader, XmlObjectS } // This method is a perf optimization for collections. The original method is ReflectionReadValue. - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private CollectionReadItemDelegate GetReflectionReadValueDelegate(Type type) { int nullables = 0; @@ -353,7 +353,7 @@ private CollectionReadItemDelegate GetReflectionReadValueDelegate(Type type) return ReflectionInternalDeserialize; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] object? GetReadItemOfPrimitiveTypeDelegate(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract collectionContract, Type itemType, string itemName, string itemNs) { return ReadItemOfPrimitiveType(xmlReader, context, itemType, itemName, itemNs, primitiveContract, nullables); @@ -370,7 +370,7 @@ private void ReflectionSetMemberValue(ref object obj, object? memberValue, DataM dataMember.Setter(ref obj, memberValue); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private object? ReflectionReadValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, DataMember dataMember, string ns) { Type type = dataMember.MemberType; @@ -379,7 +379,7 @@ private void ReflectionSetMemberValue(ref object obj, object? memberValue, DataM return ReflectionReadValue(xmlReader, context, type, name, ns, dataMember.MemberPrimitiveContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private object? ReflectionInternalDeserialize(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract? collectionContract, Type type, string name, string ns) { return context.InternalDeserialize(xmlReader, DataContract.GetId(type.TypeHandle), type.TypeHandle, name, ns); @@ -463,7 +463,7 @@ private bool IsArrayLikeCollection(CollectionDataContract collectionContract) return collectionContract.Kind == CollectionKind.Array || IsArrayLikeInterface(collectionContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private object ReflectionCreateCollection(CollectionDataContract collectionContract) { if (IsArrayLikeCollection(collectionContract)) @@ -603,13 +603,13 @@ private CollectionSetItemDelegate GetCollectionSetItemDelegate(CollectionData }; } } - } - [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", + [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", Justification = "The call to MakeGenericMethod is safe due to the fact that ObjectToKeyValuePairGetKey and ObjectToKeyValuePairGetValue are not annotated.")] - private MethodInfo MakeGenericMethod(MethodInfo method, Type keyType, Type valueType) => method.MakeGenericMethod(keyType, valueType); + static MethodInfo MakeGenericMethod(MethodInfo method, Type keyType, Type valueType) => method.MakeGenericMethod(keyType, valueType); + } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private bool ReflectionTryReadPrimitiveArray(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString collectionItemName, XmlDictionaryString collectionItemNamespace, Type type, Type itemType, int arraySize, [NotNullWhen(true)] out object? resultArray) { resultArray = null; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatReader.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatReader.cs index 9804b40f6f5c36..433e003a7cd5cd 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatReader.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatReader.cs @@ -27,7 +27,7 @@ public ReflectionXmlClassReader(ClassDataContract classDataContract) _reflectionReader = new ReflectionXmlReader(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public object ReflectionReadClass(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext? context, XmlDictionaryString[]? memberNames, XmlDictionaryString[]? memberNamespaces) { return _reflectionReader.ReflectionReadClass(xmlReader, context, memberNames, memberNamespaces, _classContract); @@ -38,13 +38,13 @@ internal sealed class ReflectionXmlCollectionReader { private readonly ReflectionReader _reflectionReader = new ReflectionXmlReader(); - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public object ReflectionReadCollection(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString itemName, XmlDictionaryString itemNamespace, CollectionDataContract collectionContract) { return _reflectionReader.ReflectionReadCollection(xmlReader, context, itemName, itemNamespace/*itemNamespace*/, collectionContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void ReflectionReadGetOnlyCollection(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString itemName, XmlDictionaryString itemNs, CollectionDataContract collectionContract) { _reflectionReader.ReflectionReadGetOnlyCollection(xmlReader, context, itemName, itemNs, collectionContract); @@ -53,7 +53,7 @@ public void ReflectionReadGetOnlyCollection(XmlReaderDelegator xmlReader, XmlObj internal sealed class ReflectionXmlReader : ReflectionReader { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected override void ReflectionReadMembers(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, XmlDictionaryString[] memberNames, XmlDictionaryString[]? memberNamespaces, ClassDataContract classContract, ref object obj) { Debug.Assert(memberNamespaces != null); @@ -115,7 +115,7 @@ protected override string GetCollectionContractNamespace(CollectionDataContract return collectionContract.StableName.Namespace; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected override object? ReflectionReadDictionaryItem(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context, CollectionDataContract collectionContract) { Debug.Assert(collectionContract.Kind == CollectionKind.Dictionary || collectionContract.Kind == CollectionKind.GenericDictionary); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatWriter.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatWriter.cs index 8b8c329a06bfe8..c761757dc8d1f2 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatWriter.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatWriter.cs @@ -16,13 +16,13 @@ internal sealed class ReflectionXmlFormatWriter { private readonly ReflectionXmlClassWriter _reflectionClassWriter = new ReflectionXmlClassWriter(); - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void ReflectionWriteClass(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract) { _reflectionClassWriter.ReflectionWriteClass(xmlWriter, obj, context, classContract, null/*memberNames*/); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void ReflectionWriteCollection(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, CollectionDataContract collectionDataContract) { XmlDictionaryString ns = collectionDataContract.Namespace; @@ -89,7 +89,7 @@ public void ReflectionWriteCollection(XmlWriterDelegator xmlWriter, object obj, } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private bool ReflectionTryWritePrimitiveArray(XmlWriterDelegator xmlWriter, object obj, Type type, Type itemType, XmlDictionaryString collectionItemName, XmlDictionaryString itemNamespace) { PrimitiveDataContract? primitiveContract = PrimitiveDataContract.GetPrimitiveDataContract(itemType); @@ -129,7 +129,7 @@ private bool ReflectionTryWritePrimitiveArray(XmlWriterDelegator xmlWriter, obje internal sealed class ReflectionXmlClassWriter : ReflectionClassWriter { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected override int ReflectionWriteMembers(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext context, ClassDataContract classContract, ClassDataContract derivedMostClassContract, int childElementIndex, XmlDictionaryString[]? emptyStringArray) { int memberCount = (classContract.BaseContract == null) ? 0 : diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SchemaExporter.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SchemaExporter.cs index e73399b86f379e..9ae592952f8fb9 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SchemaExporter.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SchemaExporter.cs @@ -44,7 +44,7 @@ private XmlDocument XmlDoc } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void Export() { try @@ -80,7 +80,7 @@ private void ExportSerializationSchema() } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ExportDataContract(DataContract dataContract) { if (dataContract.IsBuiltInDataContract) @@ -121,7 +121,7 @@ private XmlSchemaElement ExportTopLevelElement(DataContract dataContract, XmlSch return topLevelElement; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ExportClassDataContract(ClassDataContract classDataContract, XmlSchema schema) { XmlSchemaComplexType type = new XmlSchemaComplexType(); @@ -252,7 +252,7 @@ private static XmlElement ExportActualType(XmlQualifiedName typeName, XmlDocumen return actualTypeElement; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private XmlElement ExportGenericInfo(Type clrType, string elementName, string elementNs) { Type? itemType; @@ -345,7 +345,7 @@ private XmlElement ExportGenericInfo(Type clrType, string elementName, string el return null; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ExportCollectionDataContract(CollectionDataContract collectionDataContract, XmlSchema schema) { XmlSchemaComplexType type = new XmlSchemaComplexType(); @@ -447,7 +447,7 @@ internal static long GetDefaultEnumValue(bool isFlags, int index) return isFlags ? (long)Math.Pow(2, index) : index; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ExportISerializableDataContract(ClassDataContract dataContract, XmlSchema schema) { XmlSchemaComplexType type = new XmlSchemaComplexType(); @@ -487,7 +487,7 @@ private XmlSchemaComplexContentExtension CreateTypeContent(XmlSchemaComplexType return extension; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ExportXmlDataContract(XmlDataContract dataContract) { XmlQualifiedName? typeQName; @@ -574,7 +574,7 @@ private static void ReprocessAll(XmlSchemaSet schemas)// and remove duplicate it } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static void GetXmlTypeInfo(Type type, out XmlQualifiedName stableName, out XmlSchemaType? xsdType, out bool hasRoot) { if (IsSpecialXmlType(type, out stableName!, out xsdType, out hasRoot)) @@ -586,7 +586,7 @@ internal static void GetXmlTypeInfo(Type type, out XmlQualifiedName stableName, throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.InvalidXmlDataContractName, DataContract.GetClrTypeFullName(type)))); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static bool InvokeSchemaProviderMethod(Type clrType, XmlSchemaSet schemas, out XmlQualifiedName stableName, out XmlSchemaType? xsdType, out bool hasRoot) { xsdType = null; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SurrogateDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SurrogateDataContract.cs index e5167c7ed36623..8a53ac4d1ff6e7 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SurrogateDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SurrogateDataContract.cs @@ -14,7 +14,7 @@ internal sealed class SurrogateDataContract : DataContract { private readonly SurrogateDataContractCriticalHelper _helper; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal SurrogateDataContract(Type type, ISerializationSurrogate serializationSurrogate) : base(new SurrogateDataContractCriticalHelper(type, serializationSurrogate)) { @@ -26,7 +26,7 @@ internal ISerializationSurrogate SerializationSurrogate get { return _helper.SerializationSurrogate; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext? context) { Debug.Assert(context != null); @@ -60,7 +60,7 @@ private void SerializationSurrogateGetObjectData(object obj, SerializationInfo s SerializationSurrogate.GetObjectData(obj, serInfo, context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext? context) { Debug.Assert(context != null); @@ -87,7 +87,7 @@ private sealed class SurrogateDataContractCriticalHelper : DataContract.DataCont { private readonly ISerializationSurrogate serializationSurrogate; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal SurrogateDataContractCriticalHelper( [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type, diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XPathQueryGenerator.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XPathQueryGenerator.cs index 98adc0bb2b9de5..2eb15a5cfa0a2b 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XPathQueryGenerator.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XPathQueryGenerator.cs @@ -19,14 +19,14 @@ public static class XPathQueryGenerator private const string XPathSeparator = "/"; private const string NsSeparator = ":"; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public static string CreateFromDataContractSerializer(Type type, MemberInfo[] pathToMember, out XmlNamespaceManager namespaces) { return CreateFromDataContractSerializer(type, pathToMember, null, out namespaces); } // Here you can provide your own root element Xpath which will replace the Xpath of the top level element - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public static string CreateFromDataContractSerializer(Type type, MemberInfo[] pathToMember, StringBuilder? rootElementXpath, out XmlNamespaceManager namespaces) { if (type == null) @@ -60,7 +60,7 @@ public static string CreateFromDataContractSerializer(Type type, MemberInfo[] pa return context.XPath; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static DataContract ProcessDataContract(DataContract contract, ExportContext context, MemberInfo memberNode) { if (contract is ClassDataContract) @@ -70,7 +70,7 @@ private static DataContract ProcessDataContract(DataContract contract, ExportCon throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(SR.QueryGeneratorPathToMemberNotFound)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private static DataContract ProcessClassDataContract(ClassDataContract contract, ExportContext context, MemberInfo memberNode) { string prefix = context.SetNamespace(contract.Namespace!.Value); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlDataContract.cs index 146924d4dfd318..d5f37095e3c43f 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlDataContract.cs @@ -22,7 +22,7 @@ internal sealed class XmlDataContract : DataContract { private readonly XmlDataContractCriticalHelper _helper; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal XmlDataContract(Type type) : base(new XmlDataContractCriticalHelper(type)) { _helper = (base.Helper as XmlDataContractCriticalHelper)!; @@ -30,7 +30,7 @@ internal XmlDataContract(Type type) : base(new XmlDataContractCriticalHelper(typ public override DataContractDictionary? KnownDataContracts { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { return _helper.KnownDataContracts; } @@ -86,7 +86,7 @@ internal bool IsTopLevelElementNullable internal CreateXmlSerializableDelegate CreateXmlSerializableDelegate { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { // We create XmlSerializableDelegate via CodeGen when CodeGen is enabled; @@ -127,7 +127,7 @@ private sealed class XmlDataContractCriticalHelper : DataContract.DataContractCr private CreateXmlSerializableDelegate? _createXmlSerializable; private XmlSchemaType? _xsdType; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal XmlDataContractCriticalHelper( [DynamicallyAccessedMembers(ClassDataContract.DataContractPreserveMemberTypes)] Type type) : base(type) @@ -175,7 +175,7 @@ internal XmlDataContractCriticalHelper( internal override DataContractDictionary? KnownDataContracts { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (!_isKnownTypeAttributeChecked && UnderlyingType != null) @@ -255,7 +255,7 @@ internal CreateXmlSerializableDelegate? CreateXmlSerializableDelegate return ctor; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal CreateXmlSerializableDelegate GenerateCreateXmlSerializableDelegate() { Type type = this.UnderlyingType; @@ -372,7 +372,7 @@ internal IXmlSerializable ReflectionCreateXmlSerializable(Type type) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContext? context) { if (context == null) @@ -381,7 +381,7 @@ public override void WriteXmlValue(XmlWriterDelegator xmlWriter, object obj, Xml context.WriteIXmlSerializable(xmlWriter, obj); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public override object? ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext? context) { object? o; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs index 411e44c98ac257..61d534ebeab6f3 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs @@ -117,7 +117,7 @@ internal static MethodInfo GetCurrentMethod private static MethodInfo? s_getItemContractMethod; internal static MethodInfo GetItemContractMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_getItemContractMethod == null) @@ -160,7 +160,7 @@ internal static MethodInfo IsStartElementMethod0 private static MethodInfo? s_getUninitializedObjectMethod; internal static MethodInfo GetUninitializedObjectMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_getUninitializedObjectMethod == null) @@ -208,7 +208,7 @@ internal static PropertyInfo NodeTypeProperty private static ConstructorInfo? s_hashtableCtor; internal static ConstructorInfo HashtableCtor { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_hashtableCtor == null) @@ -349,7 +349,7 @@ internal static MethodInfo IncrementItemCountMethod private static MethodInfo? s_internalDeserializeMethod; internal static MethodInfo InternalDeserializeMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_internalDeserializeMethod == null) @@ -378,7 +378,7 @@ internal static MethodInfo MoveToNextElementMethod private static MethodInfo? s_getMemberIndexMethod; internal static MethodInfo GetMemberIndexMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_getMemberIndexMethod == null) @@ -393,7 +393,7 @@ internal static MethodInfo GetMemberIndexMethod private static MethodInfo? s_getMemberIndexWithRequiredMembersMethod; internal static MethodInfo GetMemberIndexWithRequiredMembersMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_getMemberIndexWithRequiredMembersMethod == null) @@ -436,7 +436,7 @@ internal static MethodInfo SkipUnknownElementMethod private static MethodInfo? s_readIfNullOrRefMethod; internal static MethodInfo ReadIfNullOrRefMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_readIfNullOrRefMethod == null) @@ -633,7 +633,7 @@ internal static MethodInfo CreateSerializationExceptionMethod private static MethodInfo? s_readSerializationInfoMethod; internal static MethodInfo ReadSerializationInfoMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_readSerializationInfoMethod == null) @@ -662,7 +662,7 @@ internal static MethodInfo CreateUnexpectedStateExceptionMethod private static MethodInfo? s_internalSerializeReferenceMethod; internal static MethodInfo InternalSerializeReferenceMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_internalSerializeReferenceMethod == null) @@ -677,7 +677,7 @@ internal static MethodInfo InternalSerializeReferenceMethod private static MethodInfo? s_internalSerializeMethod; internal static MethodInfo InternalSerializeMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_internalSerializeMethod == null) @@ -692,7 +692,7 @@ internal static MethodInfo InternalSerializeMethod private static MethodInfo? s_writeNullMethod; internal static MethodInfo WriteNullMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_writeNullMethod == null) @@ -812,7 +812,7 @@ internal static MethodInfo GetHasValueMethod private static MethodInfo? s_writeISerializableMethod; internal static MethodInfo WriteISerializableMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_writeISerializableMethod == null) @@ -842,7 +842,7 @@ internal static MethodInfo IsMemberTypeSameAsMemberValue private static MethodInfo? s_writeExtensionDataMethod; internal static MethodInfo WriteExtensionDataMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_writeExtensionDataMethod == null) @@ -856,7 +856,7 @@ internal static MethodInfo WriteExtensionDataMethod private static MethodInfo? s_writeXmlValueMethod; internal static MethodInfo WriteXmlValueMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_writeXmlValueMethod == null) @@ -871,7 +871,7 @@ internal static MethodInfo WriteXmlValueMethod private static MethodInfo? s_readXmlValueMethod; internal static MethodInfo ReadXmlValueMethod { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_readXmlValueMethod == null) @@ -932,7 +932,7 @@ internal static FieldInfo MemberNamesField private static PropertyInfo? s_childElementNamespacesProperty; internal static PropertyInfo ChildElementNamespacesProperty { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_childElementNamespacesProperty == null) @@ -961,7 +961,7 @@ internal static PropertyInfo CollectionItemNameProperty private static PropertyInfo? s_childElementNamespaceProperty; internal static PropertyInfo ChildElementNamespaceProperty { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { if (s_childElementNamespaceProperty == null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatReaderGenerator.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatReaderGenerator.cs index 1e7d399e5c737d..5ad3e85d06feb3 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatReaderGenerator.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatReaderGenerator.cs @@ -31,19 +31,19 @@ public XmlFormatReaderGenerator() _helper = new CriticalHelper(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public XmlFormatClassReaderDelegate GenerateClassReader(ClassDataContract classContract) { return _helper.GenerateClassReader(classContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public XmlFormatCollectionReaderDelegate GenerateCollectionReader(CollectionDataContract collectionContract) { return _helper.GenerateCollectionReader(collectionContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public XmlFormatGetOnlyCollectionReaderDelegate GenerateGetOnlyCollectionReader(CollectionDataContract collectionContract) { return _helper.GenerateGetOnlyCollectionReader(collectionContract); @@ -65,13 +65,13 @@ private sealed class CriticalHelper private ArgBuilder _memberNamespacesArg = null!; // initialized in InitArgs private ArgBuilder? _collectionContractArg; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private XmlFormatClassReaderDelegate CreateReflectionXmlClassReader(ClassDataContract classContract) { return new ReflectionXmlClassReader(classContract).ReflectionReadClass; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public XmlFormatClassReaderDelegate GenerateClassReader(ClassDataContract classContract) { if (DataContractSerializer.Option == SerializationOption.ReflectionOnly) @@ -155,13 +155,13 @@ public XmlFormatClassReaderDelegate GenerateClassReader(ClassDataContract classC } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private XmlFormatCollectionReaderDelegate CreateReflectionXmlCollectionReader() { return new ReflectionXmlCollectionReader().ReflectionReadCollection; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public XmlFormatCollectionReaderDelegate GenerateCollectionReader(CollectionDataContract collectionContract) { if (DataContractSerializer.Option == SerializationOption.ReflectionOnly) @@ -178,13 +178,13 @@ public XmlFormatCollectionReaderDelegate GenerateCollectionReader(CollectionData } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private XmlFormatGetOnlyCollectionReaderDelegate CreateReflectionReadGetOnlyCollectionReader() { return new ReflectionXmlCollectionReader().ReflectionReadGetOnlyCollection; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public XmlFormatGetOnlyCollectionReaderDelegate GenerateGetOnlyCollectionReader(CollectionDataContract collectionContract) { if (DataContractSerializer.Option == SerializationOption.ReflectionOnly) @@ -240,7 +240,7 @@ private void InitArgs() [MemberNotNull(nameof(_objectType))] [MemberNotNull(nameof(_objectLocal))] - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void CreateObject(ClassDataContract classContract) { Type type = _objectType = classContract.UnderlyingType; @@ -334,7 +334,7 @@ private bool InvokeFactoryMethod(ClassDataContract classContract, LocalBuilder? return false; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ReadClass(ClassDataContract classContract) { if (classContract.HasExtensionData) @@ -359,7 +359,7 @@ private void ReadClass(ClassDataContract classContract) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ReadMembers(ClassDataContract classContract, LocalBuilder? extensionDataLocal) { int memberCount = classContract.MemberNames!.Length; @@ -391,7 +391,7 @@ private void ReadMembers(ClassDataContract classContract, LocalBuilder? extensio } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private int ReadMembers(ClassDataContract classContract, bool[] requiredMembers, Label[] memberLabels, LocalBuilder memberIndexLocal, LocalBuilder? requiredIndexLocal) { Debug.Assert(_objectLocal != null); @@ -464,7 +464,7 @@ private int GetRequiredMembers(ClassDataContract contract, bool[] requiredMember return memberCount; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ReadISerializable(ClassDataContract classContract) { Debug.Assert(_objectLocal != null); @@ -479,7 +479,7 @@ private void ReadISerializable(ClassDataContract classContract) _ilg.Call(ctor); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private LocalBuilder ReadValue(Type type, string name, string ns) { LocalBuilder value = _ilg.DeclareLocal(type, "valueRead"); @@ -570,7 +570,7 @@ private LocalBuilder ReadValue(Type type, string name, string ns) return value; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void InternalDeserialize(LocalBuilder value, Type type, string name, string ns) { _ilg.Load(_contextArg); @@ -586,7 +586,7 @@ private void InternalDeserialize(LocalBuilder value, Type type, string name, str _ilg.Stloc(value); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void WrapNullableObject(LocalBuilder innerValue, LocalBuilder outerValue, int nullables) { Type innerType = innerValue.LocalType, outerType = outerValue.LocalType; @@ -602,7 +602,7 @@ private void WrapNullableObject(LocalBuilder innerValue, LocalBuilder outerValue } [MemberNotNull(nameof(_objectLocal))] - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ReadCollection(CollectionDataContract collectionContract) { Type type = collectionContract.UnderlyingType; @@ -743,7 +743,7 @@ private void ReadCollection(CollectionDataContract collectionContract) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void ReadGetOnlyCollection(CollectionDataContract collectionContract) { Type type = collectionContract.UnderlyingType; @@ -806,7 +806,7 @@ private void ReadGetOnlyCollection(CollectionDataContract collectionContract) _ilg.EndIf(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private bool TryReadPrimitiveArray(Type type, Type itemType, LocalBuilder size) { Debug.Assert(_objectLocal != null); @@ -856,7 +856,7 @@ private bool TryReadPrimitiveArray(Type type, Type itemType, LocalBuilder size) return false; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private LocalBuilder ReadCollectionItem(CollectionDataContract collectionContract, Type itemType, string itemName, string itemNs) { if (collectionContract.Kind == CollectionKind.Dictionary || collectionContract.Kind == CollectionKind.GenericDictionary) @@ -878,7 +878,7 @@ private LocalBuilder ReadCollectionItem(CollectionDataContract collectionContrac } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void StoreCollectionValue(LocalBuilder collection, LocalBuilder value, CollectionDataContract collectionContract) { Debug.Assert(collectionContract.AddMethod != null); @@ -977,7 +977,7 @@ internal static object UnsafeGetUninitializedObject( /// Safe - marked as such so that it's callable from transparent generated IL. Takes id as parameter which /// is guaranteed to be in internal serialization cache. /// - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static object UnsafeGetUninitializedObject(int id) { var type = DataContract.GetDataContractForInitialization(id).TypeForInitialization; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatWriterGenerator.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatWriterGenerator.cs index dfb908cc041c06..a8f607a5fbe63d 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatWriterGenerator.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatWriterGenerator.cs @@ -28,13 +28,13 @@ public XmlFormatWriterGenerator() _helper = new CriticalHelper(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal XmlFormatClassWriterDelegate GenerateClassWriter(ClassDataContract classContract) { return _helper.GenerateClassWriter(classContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal XmlFormatCollectionWriterDelegate GenerateCollectionWriter(CollectionDataContract collectionContract) { return _helper.GenerateCollectionWriter(collectionContract); @@ -60,13 +60,13 @@ private sealed class CriticalHelper private int _typeIndex = 1; private int _childElementIndex; - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private XmlFormatClassWriterDelegate CreateReflectionXmlFormatClassWriterDelegate() { return new ReflectionXmlFormatWriter().ReflectionWriteClass; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal XmlFormatClassWriterDelegate GenerateClassWriter(ClassDataContract classContract) { if (DataContractSerializer.Option == SerializationOption.ReflectionOnly) @@ -98,13 +98,13 @@ internal XmlFormatClassWriterDelegate GenerateClassWriter(ClassDataContract clas } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private XmlFormatCollectionWriterDelegate CreateReflectionXmlFormatCollectionWriterDelegate() { return new ReflectionXmlFormatWriter().ReflectionWriteCollection; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal XmlFormatCollectionWriterDelegate GenerateCollectionWriter(CollectionDataContract collectionContract) { if (DataContractSerializer.Option == SerializationOption.ReflectionOnly) @@ -136,7 +136,7 @@ internal XmlFormatCollectionWriterDelegate GenerateCollectionWriter(CollectionDa } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void InitArgs(Type objType) { _xmlWriterArg = _ilg.GetArg(0); @@ -197,7 +197,7 @@ private void InvokeOnSerialized(ClassDataContract classContract) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void WriteClass(ClassDataContract classContract) { InvokeOnSerializing(classContract); @@ -250,7 +250,7 @@ private void WriteClass(ClassDataContract classContract) InvokeOnSerialized(classContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private int WriteMembers(ClassDataContract classContract, LocalBuilder? extensionDataLocal, ClassDataContract derivedMostClassContract) { int memberCount = (classContract.BaseContract == null) ? 0 : @@ -334,7 +334,7 @@ private LocalBuilder LoadMemberValue(DataMember member) return memberValue; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void WriteCollection(CollectionDataContract collectionContract) { LocalBuilder itemNamespace = _ilg.DeclareLocal(typeof(XmlDictionaryString), "itemNamespace"); @@ -503,7 +503,7 @@ private void WriteCollection(CollectionDataContract collectionContract) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private bool TryWritePrimitive(Type type, LocalBuilder? value, MemberInfo? memberInfo, LocalBuilder? arrayItemIndex, LocalBuilder ns, LocalBuilder? name, int nameIndex) { PrimitiveDataContract? primitiveContract = PrimitiveDataContract.GetPrimitiveDataContract(type); @@ -550,7 +550,7 @@ private bool TryWritePrimitive(Type type, LocalBuilder? value, MemberInfo? membe return true; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private bool TryWritePrimitiveArray(Type type, Type itemType, LocalBuilder value, LocalBuilder itemName, LocalBuilder itemNamespace) { PrimitiveDataContract? primitiveContract = PrimitiveDataContract.GetPrimitiveDataContract(itemType); @@ -596,7 +596,7 @@ private bool TryWritePrimitiveArray(Type type, Type itemType, LocalBuilder value return false; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void WriteValue(LocalBuilder memberValue, bool writeXsiType) { Type memberType = memberValue.LocalType; @@ -680,7 +680,7 @@ private void InternalSerialize(MethodInfo methodInfo, LocalBuilder memberValue, } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private LocalBuilder UnwrapNullableObject(LocalBuilder memberValue)// Leaves !HasValue on stack { Type memberType = memberValue.LocalType; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializer.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializer.cs index b10a70b1653fdf..5066ff554d64e0 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializer.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializer.cs @@ -17,14 +17,14 @@ namespace System.Runtime.Serialization public abstract class XmlObjectSerializer { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public abstract void WriteStartObject(XmlDictionaryWriter writer, object? graph); - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public abstract void WriteObjectContent(XmlDictionaryWriter writer, object? graph); - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public abstract void WriteEndObject(XmlDictionaryWriter writer); - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public virtual void WriteObject(Stream stream, object? graph) { CheckNull(stream, nameof(stream)); @@ -33,47 +33,47 @@ public virtual void WriteObject(Stream stream, object? graph) writer.Flush(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public virtual void WriteObject(XmlWriter writer, object? graph) { CheckNull(writer, nameof(writer)); WriteObject(XmlDictionaryWriter.CreateDictionaryWriter(writer), graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public virtual void WriteStartObject(XmlWriter writer, object? graph) { CheckNull(writer, nameof(writer)); WriteStartObject(XmlDictionaryWriter.CreateDictionaryWriter(writer), graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public virtual void WriteObjectContent(XmlWriter writer, object? graph) { CheckNull(writer, nameof(writer)); WriteObjectContent(XmlDictionaryWriter.CreateDictionaryWriter(writer), graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public virtual void WriteEndObject(XmlWriter writer) { CheckNull(writer, nameof(writer)); WriteEndObject(XmlDictionaryWriter.CreateDictionaryWriter(writer)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public virtual void WriteObject(XmlDictionaryWriter writer, object? graph) { WriteObjectHandleExceptions(new XmlWriterDelegator(writer), graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void WriteObjectHandleExceptions(XmlWriterDelegator writer, object? graph) { WriteObjectHandleExceptions(writer, graph, null); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void WriteObjectHandleExceptions(XmlWriterDelegator writer, object? graph, DataContractResolver? dataContractResolver) { try @@ -95,14 +95,14 @@ internal void WriteObjectHandleExceptions(XmlWriterDelegator writer, object? gra internal virtual DataContractDictionary? KnownDataContracts { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { return null; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual void InternalWriteObject(XmlWriterDelegator writer, object? graph) { WriteStartObject(writer.Writer, graph); @@ -110,32 +110,32 @@ internal virtual void InternalWriteObject(XmlWriterDelegator writer, object? gra WriteEndObject(writer.Writer); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual void InternalWriteObject(XmlWriterDelegator writer, object? graph, DataContractResolver? dataContractResolver) { InternalWriteObject(writer, graph); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual void InternalWriteStartObject(XmlWriterDelegator writer, object? graph) { DiagnosticUtility.DebugAssert("XmlObjectSerializer.InternalWriteStartObject should never get called"); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException()); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual void InternalWriteObjectContent(XmlWriterDelegator writer, object? graph) { DiagnosticUtility.DebugAssert("XmlObjectSerializer.InternalWriteObjectContent should never get called"); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException()); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual void InternalWriteEndObject(XmlWriterDelegator writer) { DiagnosticUtility.DebugAssert("XmlObjectSerializer.InternalWriteEndObject should never get called"); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException()); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void WriteStartObjectHandleExceptions(XmlWriterDelegator writer, object? graph) { try @@ -153,7 +153,7 @@ internal void WriteStartObjectHandleExceptions(XmlWriterDelegator writer, object } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void WriteObjectContentHandleExceptions(XmlWriterDelegator writer, object? graph) { try @@ -175,7 +175,7 @@ internal void WriteObjectContentHandleExceptions(XmlWriterDelegator writer, obje } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void WriteEndObjectHandleExceptions(XmlWriterDelegator writer) { try @@ -239,72 +239,72 @@ internal static bool IsContractDeclared(DataContract contract, DataContract decl || (contract.Name.Value == declaredContract.Name.Value && contract.Namespace.Value == declaredContract.Namespace.Value); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public virtual object? ReadObject(Stream stream) { CheckNull(stream, nameof(stream)); return ReadObject(XmlDictionaryReader.CreateTextReader(stream, XmlDictionaryReaderQuotas.Max)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public virtual object? ReadObject(XmlReader reader) { CheckNull(reader, nameof(reader)); return ReadObject(XmlDictionaryReader.CreateDictionaryReader(reader)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public virtual object? ReadObject(XmlDictionaryReader reader) { return ReadObjectHandleExceptions(new XmlReaderDelegator(reader), true /*verifyObjectName*/); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public virtual object? ReadObject(XmlReader reader, bool verifyObjectName) { CheckNull(reader, nameof(reader)); return ReadObject(XmlDictionaryReader.CreateDictionaryReader(reader), verifyObjectName); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public abstract object? ReadObject(XmlDictionaryReader reader, bool verifyObjectName); - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public virtual bool IsStartObject(XmlReader reader) { CheckNull(reader, nameof(reader)); return IsStartObject(XmlDictionaryReader.CreateDictionaryReader(reader)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public abstract bool IsStartObject(XmlDictionaryReader reader); - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual object? InternalReadObject(XmlReaderDelegator reader, bool verifyObjectName) { return ReadObject(reader.UnderlyingReader, verifyObjectName); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual object? InternalReadObject(XmlReaderDelegator reader, bool verifyObjectName, DataContractResolver? dataContractResolver) { return InternalReadObject(reader, verifyObjectName); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual bool InternalIsStartObject(XmlReaderDelegator reader) { DiagnosticUtility.DebugAssert("XmlObjectSerializer.InternalIsStartObject should never get called"); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException()); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal object? ReadObjectHandleExceptions(XmlReaderDelegator reader, bool verifyObjectName) { return ReadObjectHandleExceptions(reader, verifyObjectName, null); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal object? ReadObjectHandleExceptions(XmlReaderDelegator reader, bool verifyObjectName, DataContractResolver? dataContractResolver) { try @@ -322,7 +322,7 @@ internal virtual bool InternalIsStartObject(XmlReaderDelegator reader) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal bool IsStartObjectHandleExceptions(XmlReaderDelegator reader) { try @@ -350,7 +350,7 @@ internal bool IsStartElement(XmlReaderDelegator reader) return (reader.MoveToElement() || reader.IsStartElement()); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal bool IsRootElement(XmlReaderDelegator reader, DataContract contract, XmlDictionaryString? name, XmlDictionaryString? ns) { reader.MoveToElement(); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerContext.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerContext.cs index 9f81a2b0658070..44a072448671d0 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerContext.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerContext.cs @@ -108,13 +108,13 @@ protected KnownTypeDataContractResolver KnownTypeResolver } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal DataContract GetDataContract(Type type) { return GetDataContract(type.TypeHandle, type); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual DataContract GetDataContract(RuntimeTypeHandle typeHandle, Type? type) { if (IsGetOnlyCollection) @@ -127,7 +127,7 @@ internal virtual DataContract GetDataContract(RuntimeTypeHandle typeHandle, Type } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual DataContract GetDataContractSkipValidation(int typeId, RuntimeTypeHandle typeHandle, Type? type) { if (IsGetOnlyCollection) @@ -140,7 +140,7 @@ internal virtual DataContract GetDataContractSkipValidation(int typeId, RuntimeT } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual DataContract GetDataContract(int id, RuntimeTypeHandle typeHandle) { if (IsGetOnlyCollection) @@ -153,21 +153,21 @@ internal virtual DataContract GetDataContract(int id, RuntimeTypeHandle typeHand } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual void CheckIfTypeSerializable(Type memberType, bool isMemberTypeSerializable) { if (!isMemberTypeSerializable) throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidDataContractException(SR.Format(SR.TypeNotSerializable, memberType))); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual Type GetSurrogatedType(Type type) { return type; } internal virtual DataContractDictionary? SerializerKnownDataContracts { - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { // This field must be initialized during construction by serializers using data contracts. @@ -180,7 +180,7 @@ internal virtual DataContractDictionary? SerializerKnownDataContracts } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private DataContract? GetDataContractFromSerializerKnownTypes(XmlQualifiedName qname) { DataContractDictionary? serializerKnownDataContracts = this.SerializerKnownDataContracts; @@ -190,7 +190,7 @@ internal virtual DataContractDictionary? SerializerKnownDataContracts return serializerKnownDataContracts.TryGetValue(qname, out outDataContract) ? outDataContract : null; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static DataContractDictionary? GetDataContractsForKnownTypes(IList knownTypeList) { if (knownTypeList == null) return null; @@ -207,7 +207,7 @@ internal virtual DataContractDictionary? SerializerKnownDataContracts return dataContracts; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal bool IsKnownType(DataContract dataContract, DataContractDictionary? knownDataContracts, Type? declaredType) { bool knownTypesAddedInCurrentScope = false; @@ -226,21 +226,21 @@ internal bool IsKnownType(DataContract dataContract, DataContractDictionary? kno return isKnownType; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal bool IsKnownType(DataContract dataContract, Type? declaredType) { DataContract? knownContract = ResolveDataContractFromKnownTypes(dataContract.StableName.Name, dataContract.StableName.Namespace, null /*memberTypeContract*/, declaredType); return knownContract != null && knownContract.UnderlyingType == dataContract.UnderlyingType; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal Type? ResolveNameFromKnownTypes(XmlQualifiedName typeName) { DataContract? dataContract = ResolveDataContractFromKnownTypes(typeName); return dataContract == null ? null : dataContract.UnderlyingType; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private DataContract? ResolveDataContractFromKnownTypes(XmlQualifiedName typeName) { DataContract? dataContract = PrimitiveDataContract.GetPrimitiveDataContract(typeName.Name, typeName.Namespace); @@ -255,7 +255,7 @@ internal bool IsKnownType(DataContract dataContract, Type? declaredType) return dataContract; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected DataContract? ResolveDataContractFromKnownTypes(string typeName, string? typeNs, DataContract? memberTypeContract, Type? declaredType) { XmlQualifiedName qname = new XmlQualifiedName(typeName, typeNs); @@ -300,7 +300,7 @@ internal bool IsKnownType(DataContract dataContract, Type? declaredType) return dataContract; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void PushKnownTypes(DataContract dc) { if (dc != null && dc.KnownDataContracts != null) @@ -309,7 +309,7 @@ internal void PushKnownTypes(DataContract dc) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void PopKnownTypes(DataContract dc) { if (dc != null && dc.KnownDataContracts != null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContext.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContext.cs index 37530adc744dc7..0cb500df1f1ad0 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContext.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContext.cs @@ -91,21 +91,21 @@ internal XmlObjectSerializerReadContext(DataContractSerializer serializer, DataC this.attributes = new Attributes(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual object? InternalDeserialize(XmlReaderDelegator xmlReader, int id, RuntimeTypeHandle declaredTypeHandle, string name, string ns) { DataContract dataContract = GetDataContract(id, declaredTypeHandle); return InternalDeserialize(xmlReader, name, ns, Type.GetTypeFromHandle(declaredTypeHandle), ref dataContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual object? InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, string name, string ns) { DataContract dataContract = GetDataContract(declaredType); return InternalDeserialize(xmlReader, name, ns, declaredType, ref dataContract); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual object? InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, DataContract? dataContract, string? name, string? ns) { if (dataContract == null) @@ -138,7 +138,7 @@ protected bool TryHandleNullOrRef(XmlReaderDelegator reader, Type declaredType, return false; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected object? InternalDeserialize(XmlReaderDelegator reader, string? name, string? ns, Type declaredType, ref DataContract dataContract) { object? retObj = null; @@ -218,7 +218,7 @@ internal static bool MoveToNextElement(XmlReaderDelegator xmlReader) return (xmlReader.MoveToContent() != XmlNodeType.EndElement); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal int GetMemberIndex(XmlReaderDelegator xmlReader, XmlDictionaryString[] memberNames, XmlDictionaryString[] memberNamespaces, int memberIndex, ExtensionDataObject? extensionData) { for (int i = memberIndex + 1; i < memberNames.Length; i++) @@ -230,7 +230,7 @@ internal int GetMemberIndex(XmlReaderDelegator xmlReader, XmlDictionaryString[] return memberNames.Length; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal int GetMemberIndexWithRequiredMembers(XmlReaderDelegator xmlReader, XmlDictionaryString[] memberNames, XmlDictionaryString[] memberNamespaces, int memberIndex, int requiredIndex, ExtensionDataObject? extensionData) { for (int i = memberIndex + 1; i < memberNames.Length; i++) @@ -261,7 +261,7 @@ internal static void ThrowRequiredMemberMissingException(XmlReaderDelegator xmlR throw System.Runtime.Serialization.DiagnosticUtility.ExceptionUtility.ThrowHelperError(XmlObjectSerializer.CreateSerializationException(XmlObjectSerializer.TryAddLineInfo(xmlReader, SR.Format(SR.UnexpectedElementExpectingElements, xmlReader.NodeType, xmlReader.LocalName, xmlReader.NamespaceURI, stringBuilder.ToString())))); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected void HandleMemberNotFound(XmlReaderDelegator xmlReader, ExtensionDataObject? extensionData, int memberIndex) { xmlReader.MoveToContent(); @@ -274,7 +274,7 @@ protected void HandleMemberNotFound(XmlReaderDelegator xmlReader, ExtensionDataO HandleUnknownElement(xmlReader, extensionData, memberIndex); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void HandleUnknownElement(XmlReaderDelegator xmlReader, ExtensionDataObject extensionData, int memberIndex) { if (extensionData.Members == null) @@ -288,7 +288,7 @@ internal void SkipUnknownElement(XmlReaderDelegator xmlReader) xmlReader.Skip(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal string ReadIfNullOrRef(XmlReaderDelegator xmlReader, Type memberType, bool isMemberTypeSerializable) { Debug.Assert(attributes != null); @@ -466,7 +466,7 @@ internal void CheckEndOfArray(XmlReaderDelegator xmlReader, int arraySize, XmlDi throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateUnexpectedStateException(XmlNodeType.EndElement, xmlReader)); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal object? ReadIXmlSerializable(XmlReaderDelegator xmlReader, XmlDataContract xmlDataContract, bool isMemberType) { if (_xmlSerializableReader == null) @@ -474,13 +474,13 @@ internal void CheckEndOfArray(XmlReaderDelegator xmlReader, int arraySize, XmlDi return ReadIXmlSerializable(_xmlSerializableReader, xmlReader, xmlDataContract, isMemberType); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static object? ReadRootIXmlSerializable(XmlReaderDelegator xmlReader, XmlDataContract xmlDataContract, bool isMemberType) { return ReadIXmlSerializable(new XmlSerializableReader(), xmlReader, xmlDataContract, isMemberType); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal static object? ReadIXmlSerializable(XmlSerializableReader xmlSerializableReader, XmlReaderDelegator xmlReader, XmlDataContract xmlDataContract, bool isMemberType) { object? obj = null; @@ -511,7 +511,7 @@ internal void CheckEndOfArray(XmlReaderDelegator xmlReader, int arraySize, XmlDi return obj; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public SerializationInfo ReadSerializationInfo(XmlReaderDelegator xmlReader, Type type) { var serInfo = new SerializationInfo(type, XmlObjectSerializer.FormatterConverter); @@ -555,7 +555,7 @@ public SerializationInfo ReadSerializationInfo(XmlReaderDelegator xmlReader, Typ return serInfo; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected virtual DataContract? ResolveDataContractFromTypeName() { Debug.Assert(attributes != null); @@ -563,7 +563,7 @@ public SerializationInfo ReadSerializationInfo(XmlReaderDelegator xmlReader, Typ return (attributes.XsiTypeName == null) ? null : ResolveDataContractFromKnownTypes(attributes.XsiTypeName, attributes.XsiTypeNamespace, null /*memberTypeContract*/, null); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private ExtensionDataMember ReadExtensionDataMember(XmlReaderDelegator xmlReader, int memberIndex) { var member = new ExtensionDataMember(xmlReader.LocalName, xmlReader.NamespaceURI) @@ -575,7 +575,7 @@ private ExtensionDataMember ReadExtensionDataMember(XmlReaderDelegator xmlReader return member; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public IDataNode? ReadExtensionDataValue(XmlReaderDelegator xmlReader) { ReadAttributes(xmlReader); @@ -673,7 +673,7 @@ protected virtual void StartReadExtensionDataValue(XmlReaderDelegator xmlReader) { } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private IDataNode ReadExtensionDataValue(XmlReaderDelegator xmlReader, string? dataContractName, string? dataContractNamespace) { Debug.Assert(attributes != null); @@ -747,7 +747,7 @@ private IDataNode ReadUnknownPrimitiveData(XmlReaderDelegator xmlReader, Type ty return dataNode; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private ClassDataNode ReadUnknownClassData(XmlReaderDelegator xmlReader, string? dataContractName, string? dataContractNamespace) { var dataNode = new ClassDataNode(); @@ -768,7 +768,7 @@ private ClassDataNode ReadUnknownClassData(XmlReaderDelegator xmlReader, string? return dataNode; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private CollectionDataNode ReadUnknownCollectionData(XmlReaderDelegator xmlReader, string? dataContractName, string? dataContractNamespace) { Debug.Assert(attributes != null); @@ -825,7 +825,7 @@ private CollectionDataNode ReadUnknownCollectionData(XmlReaderDelegator xmlReade return dataNode; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private ISerializableDataNode ReadUnknownISerializableData(XmlReaderDelegator xmlReader, string? dataContractName, string? dataContractNamespace) { Debug.Assert(attributes != null); @@ -906,7 +906,7 @@ private IDataNode ReadUnknownXmlData(XmlReaderDelegator xmlReader, string? dataC // all items have the same name and namespace. To recognize as an ISerializable type, it requires that all // items be unqualified. If the XML only contains elements (no attributes or other nodes) is recognized as a // class/class hierarchy. Otherwise it is deserialized as XML. - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private IDataNode ReadAndResolveUnknownXmlData(XmlReaderDelegator xmlReader, IDictionary? namespaces, string? dataContractName, string? dataContractNamespace) { @@ -1050,7 +1050,7 @@ internal static Exception CreateSerializationException(string message) return XmlObjectSerializer.CreateSerializationException(message); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected virtual object? ReadDataContractValue(DataContract dataContract, XmlReaderDelegator reader) { return dataContract.ReadXmlValue(reader, this); diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs index 12940ddcc0ff05..0e439dfe99dcee 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs @@ -32,7 +32,7 @@ internal override SerializationMode Mode get { return _mode; } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override object? InternalDeserialize(XmlReaderDelegator xmlReader, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle, string name, string ns) { if (_mode == SerializationMode.SharedContract) @@ -48,7 +48,7 @@ internal override SerializationMode Mode } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override object? InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, string name, string ns) { if (_mode == SerializationMode.SharedContract) @@ -64,7 +64,7 @@ internal override SerializationMode Mode } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override object? InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, DataContract? dataContract, string? name, string? ns) { if (_mode == SerializationMode.SharedContract) @@ -80,7 +80,7 @@ internal override SerializationMode Mode } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private object? InternalDeserializeInSharedTypeMode(XmlReaderDelegator xmlReader, int declaredTypeID, Type declaredType, string? name, string? ns) { Debug.Assert(attributes != null); @@ -123,7 +123,7 @@ internal override SerializationMode Mode return ReadDataContractValue(dataContract, xmlReader); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private object? InternalDeserializeWithSurrogate(XmlReaderDelegator xmlReader, Type declaredType, DataContract? surrogateDataContract, string? name, string? ns) { Debug.Assert(_serializationSurrogateProvider != null); @@ -150,7 +150,7 @@ private Type ResolveDataContractTypeInSharedTypeMode(string assemblyName, string throw new PlatformNotSupportedException(SR.PlatformNotSupported_NetDataContractSerializer); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private DataContract? ResolveDataContractInSharedTypeMode(string assemblyName, string typeName, out Assembly assembly, out Type type) { type = ResolveDataContractTypeInSharedTypeMode(assemblyName, typeName, out assembly); @@ -162,7 +162,7 @@ private Type ResolveDataContractTypeInSharedTypeMode(string assemblyName, string return null; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected override DataContract? ResolveDataContractFromTypeName() { Debug.Assert(attributes != null); @@ -183,7 +183,7 @@ private Type ResolveDataContractTypeInSharedTypeMode(string assemblyName, string return null; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void CheckIfTypeSerializable(Type memberType, bool isMemberTypeSerializable) { if (_serializationSurrogateProvider != null) @@ -199,7 +199,7 @@ internal override void CheckIfTypeSerializable(Type memberType, bool isMemberTyp base.CheckIfTypeSerializable(memberType, isMemberTypeSerializable); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override Type GetSurrogatedType(Type type) { if (_serializationSurrogateProvider == null) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs index 9f62c0ba158219..e48ab7816898d9 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs @@ -88,7 +88,7 @@ internal void ResetIsGetOnlyCollection() _isGetOnlyCollection = false; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void InternalSerializeReference(XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle) { if (!OnHandleReference(xmlWriter, obj, true /*canContainCyclicReference*/)) @@ -96,7 +96,7 @@ internal void InternalSerializeReference(XmlWriterDelegator xmlWriter, object ob OnEndHandleReference(xmlWriter, obj, true /*canContainCyclicReference*/); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual void InternalSerialize(XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle) { if (writeXsiType) @@ -126,7 +126,7 @@ internal virtual void InternalSerialize(XmlWriterDelegator xmlWriter, object obj } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void SerializeWithoutXsiType(DataContract dataContract, XmlWriterDelegator xmlWriter, object obj, RuntimeTypeHandle declaredTypeHandle) { if (OnHandleIsReference(xmlWriter, dataContract, obj)) @@ -143,7 +143,7 @@ internal void SerializeWithoutXsiType(DataContract dataContract, XmlWriterDelega } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual void SerializeWithXsiTypeAtTopLevel(DataContract dataContract, XmlWriterDelegator xmlWriter, object obj, RuntimeTypeHandle originalDeclaredTypeHandle, Type graphType) { Debug.Assert(rootTypeDataContract != null); @@ -165,7 +165,7 @@ internal virtual void SerializeWithXsiTypeAtTopLevel(DataContract dataContract, SerializeAndVerifyType(dataContract, xmlWriter, obj, verifyKnownType, originalDeclaredTypeHandle, declaredType); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected virtual void SerializeWithXsiType(XmlWriterDelegator xmlWriter, object obj, RuntimeTypeHandle objectTypeHandle, Type? objectType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle, Type declaredType) { bool verifyKnownType = false; @@ -232,7 +232,7 @@ internal bool OnHandleIsReference(XmlWriterDelegator xmlWriter, DataContract con } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected void SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, object obj, bool verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType) { bool knownTypesAddedInCurrentScope = false; @@ -292,7 +292,7 @@ internal virtual void WriteString(XmlWriterDelegator xmlWriter, string value) xmlWriter.WriteString(value); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual void WriteString(XmlWriterDelegator xmlWriter, string? value, XmlDictionaryString name, XmlDictionaryString? ns) { if (value == null) @@ -310,7 +310,7 @@ internal virtual void WriteBase64(XmlWriterDelegator xmlWriter, byte[] value) xmlWriter.WriteBase64(value); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual void WriteBase64(XmlWriterDelegator xmlWriter, byte[] value, XmlDictionaryString name, XmlDictionaryString ns) { if (value == null) @@ -328,7 +328,7 @@ internal virtual void WriteUri(XmlWriterDelegator xmlWriter, Uri value) xmlWriter.WriteUri(value); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual void WriteUri(XmlWriterDelegator xmlWriter, Uri value, XmlDictionaryString name, XmlDictionaryString ns) { if (value == null) @@ -346,7 +346,7 @@ internal virtual void WriteQName(XmlWriterDelegator xmlWriter, XmlQualifiedName xmlWriter.WriteQName(value); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual void WriteQName(XmlWriterDelegator xmlWriter, XmlQualifiedName? value, XmlDictionaryString name, XmlDictionaryString? ns) { if (value == null) @@ -396,14 +396,14 @@ internal virtual void OnEndHandleReference(XmlWriterDelegator xmlWriter, object } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void WriteNull(XmlWriterDelegator xmlWriter, Type memberType, bool isMemberTypeSerializable) { CheckIfTypeSerializable(memberType, isMemberTypeSerializable); WriteNull(xmlWriter); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void WriteNull(XmlWriterDelegator xmlWriter, Type memberType, bool isMemberTypeSerializable, XmlDictionaryString name, XmlDictionaryString? ns) { xmlWriter.WriteStartElement(name, ns); @@ -507,7 +507,7 @@ internal void GetObjectData(ISerializable obj, SerializationInfo serInfo, Stream obj.GetObjectData(serInfo, context); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void WriteISerializable(XmlWriterDelegator xmlWriter, ISerializable obj) { Type objType = obj.GetType(); @@ -523,7 +523,7 @@ public void WriteISerializable(XmlWriterDelegator xmlWriter, ISerializable obj) WriteSerializationInfo(xmlWriter, objType, serInfo); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void WriteSerializationInfo(XmlWriterDelegator xmlWriter, Type objType, SerializationInfo serInfo) { if (DataContract.GetClrTypeFullName(objType) != serInfo.FullTypeName) @@ -564,7 +564,7 @@ internal void WriteSerializationInfo(XmlWriterDelegator xmlWriter, Type objType, } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected virtual void WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, object obj, RuntimeTypeHandle declaredTypeHandle) { dataContract.WriteXmlValue(xmlWriter, obj, this); @@ -575,7 +575,7 @@ protected virtual void WriteNull(XmlWriterDelegator xmlWriter) XmlObjectSerializer.WriteNull(xmlWriter); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void WriteResolvedTypeInfo(XmlWriterDelegator writer, Type objectType, Type declaredType) { XmlDictionaryString? typeName, typeNamespace; @@ -585,7 +585,7 @@ private void WriteResolvedTypeInfo(XmlWriterDelegator writer, Type objectType, T } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private bool ResolveType(Type objectType, Type declaredType, [NotNullWhen(true)] out XmlDictionaryString? typeName, [NotNullWhen(true)] out XmlDictionaryString? typeNamespace) { Debug.Assert(DataContractResolver != null); @@ -612,7 +612,7 @@ private bool ResolveType(Type objectType, Type declaredType, [NotNullWhen(true)] return true; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] protected virtual bool WriteTypeInfo(XmlWriterDelegator writer, DataContract contract, DataContract declaredContract) { if (!XmlObjectSerializer.IsContractDeclared(contract, declaredContract)) @@ -641,7 +641,7 @@ protected virtual void WriteTypeInfo(XmlWriterDelegator writer, XmlDictionaryStr writer.WriteAttributeQualifiedName(Globals.XsiPrefix, DictionaryGlobals.XsiTypeLocalName, DictionaryGlobals.SchemaInstanceNamespace, dataContractName, dataContractNamespace); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void WriteExtensionData(XmlWriterDelegator xmlWriter, ExtensionDataObject? extensionData, int memberIndex) { if (IgnoreExtensionDataObject || extensionData == null) @@ -661,7 +661,7 @@ public void WriteExtensionData(XmlWriterDelegator xmlWriter, ExtensionDataObject } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void WriteExtensionDataMember(XmlWriterDelegator xmlWriter, ExtensionDataMember member) { xmlWriter.WriteStartElement(member.Name, member.Namespace); @@ -670,7 +670,7 @@ private void WriteExtensionDataMember(XmlWriterDelegator xmlWriter, ExtensionDat xmlWriter.WriteEndElement(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal virtual void WriteExtensionDataTypeInfo(XmlWriterDelegator xmlWriter, IDataNode dataNode) { if (dataNode.DataContractName != null) @@ -679,7 +679,7 @@ internal virtual void WriteExtensionDataTypeInfo(XmlWriterDelegator xmlWriter, I WriteClrTypeInfo(xmlWriter, dataNode.DataType, dataNode.ClrTypeName, dataNode.ClrAssemblyName); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal void WriteExtensionDataValue(XmlWriterDelegator xmlWriter, IDataNode? dataNode) { IncrementItemCount(1); @@ -721,7 +721,7 @@ internal void WriteExtensionDataValue(XmlWriterDelegator xmlWriter, IDataNode? d OnEndHandleReference(xmlWriter, (dataNode.Value == null ? dataNode : dataNode.Value), true /*canContainCyclicReference*/); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal bool TryWriteDeserializedExtensionData(XmlWriterDelegator xmlWriter, IDataNode dataNode) { object? o = dataNode.Value; @@ -733,7 +733,7 @@ internal bool TryWriteDeserializedExtensionData(XmlWriterDelegator xmlWriter, ID return true; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void WriteExtensionClassData(XmlWriterDelegator xmlWriter, ClassDataNode dataNode) { if (!TryWriteDeserializedExtensionData(xmlWriter, dataNode)) @@ -751,7 +751,7 @@ private void WriteExtensionClassData(XmlWriterDelegator xmlWriter, ClassDataNode } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void WriteExtensionCollectionData(XmlWriterDelegator xmlWriter, CollectionDataNode dataNode) { if (!TryWriteDeserializedExtensionData(xmlWriter, dataNode)) @@ -773,7 +773,7 @@ private void WriteExtensionCollectionData(XmlWriterDelegator xmlWriter, Collecti } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void WriteExtensionISerializableData(XmlWriterDelegator xmlWriter, ISerializableDataNode dataNode) { if (!TryWriteDeserializedExtensionData(xmlWriter, dataNode)) @@ -797,7 +797,7 @@ private void WriteExtensionISerializableData(XmlWriterDelegator xmlWriter, ISeri } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void WriteExtensionXmlData(XmlWriterDelegator xmlWriter, XmlDataNode dataNode) { if (!TryWriteDeserializedExtensionData(xmlWriter, dataNode)) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContextComplex.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContextComplex.cs index 5f092d5e79c9e2..513e6a69646b1b 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContextComplex.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContextComplex.cs @@ -62,7 +62,7 @@ internal override void WriteString(XmlWriterDelegator xmlWriter, string value) xmlWriter.WriteString(value); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void WriteString(XmlWriterDelegator xmlWriter, string? value, XmlDictionaryString name, XmlDictionaryString? ns) { if (value == null) @@ -82,7 +82,7 @@ internal override void WriteBase64(XmlWriterDelegator xmlWriter, byte[] value) xmlWriter.WriteBase64(value); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void WriteBase64(XmlWriterDelegator xmlWriter, byte[] value, XmlDictionaryString name, XmlDictionaryString ns) { if (value == null) @@ -102,7 +102,7 @@ internal override void WriteUri(XmlWriterDelegator xmlWriter, Uri value) xmlWriter.WriteUri(value); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void WriteUri(XmlWriterDelegator xmlWriter, Uri value, XmlDictionaryString name, XmlDictionaryString ns) { if (value == null) @@ -122,7 +122,7 @@ internal override void WriteQName(XmlWriterDelegator xmlWriter, XmlQualifiedName xmlWriter.WriteQName(value); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void WriteQName(XmlWriterDelegator xmlWriter, XmlQualifiedName? value, XmlDictionaryString name, XmlDictionaryString? ns) { if (value == null) @@ -139,7 +139,7 @@ internal override void WriteQName(XmlWriterDelegator xmlWriter, XmlQualifiedName } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void InternalSerialize(XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle) { if (_serializationSurrogateProvider == null) @@ -177,7 +177,7 @@ internal override void OnEndHandleReference(XmlWriterDelegator xmlWriter, object base.OnEndHandleReference(xmlWriter, obj, canContainCyclicReference); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override void CheckIfTypeSerializable(Type memberType, bool isMemberTypeSerializable) { if (_serializationSurrogateProvider != null) @@ -193,7 +193,7 @@ internal override void CheckIfTypeSerializable(Type memberType, bool isMemberTyp base.CheckIfTypeSerializable(memberType, isMemberTypeSerializable); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] internal override Type GetSurrogatedType(Type type) { if (_serializationSurrogateProvider == null) @@ -216,7 +216,7 @@ internal override Type GetSurrogatedType(Type type) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void InternalSerializeWithSurrogate(XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle) { RuntimeTypeHandle objTypeHandle = isDeclaredType ? declaredTypeHandle : obj.GetType().TypeHandle; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XsdDataContractExporter.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XsdDataContractExporter.cs index 7faea437f691e8..db8b5f510e8c8d 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XsdDataContractExporter.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XsdDataContractExporter.cs @@ -74,7 +74,7 @@ private void TraceExportError(Exception exception) { } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void Export(ICollection assemblies) { if (assemblies == null) @@ -106,7 +106,7 @@ public void Export(ICollection assemblies) TraceExportEnd(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void Export(ICollection types) { if (types == null) @@ -135,7 +135,7 @@ public void Export(ICollection types) TraceExportEnd(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public void Export(Type type) { if (type == null) @@ -158,7 +158,7 @@ public void Export(Type type) TraceExportEnd(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public XmlQualifiedName GetSchemaTypeName(Type type) { if (type == null) @@ -172,7 +172,7 @@ public XmlQualifiedName GetSchemaTypeName(Type type) return dataContract.StableName; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public XmlSchemaType? GetSchemaType(Type type) { if (type == null) @@ -186,7 +186,7 @@ public XmlQualifiedName GetSchemaTypeName(Type type) return null; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public XmlQualifiedName? GetRootElementName(Type type) { if (type == null) @@ -214,7 +214,7 @@ private Type GetSurrogatedType(Type type) return type; } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void CheckAndAddType(Type type) { type = GetSurrogatedType(type); @@ -222,13 +222,13 @@ private void CheckAndAddType(Type type) AddType(type); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void AddType(Type type) { DataContractSet.Add(type); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void Export() { AddKnownTypes(); @@ -236,7 +236,7 @@ private void Export() schemaExporter.Export(); } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] private void AddKnownTypes() { if (Options != null) @@ -256,7 +256,7 @@ private void AddKnownTypes() } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public bool CanExport(ICollection assemblies) { if (assemblies == null) @@ -290,7 +290,7 @@ public bool CanExport(ICollection assemblies) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public bool CanExport(ICollection types) { if (types == null) @@ -321,7 +321,7 @@ public bool CanExport(ICollection types) } } - [RequiresUnreferencedCode(DataContractJsonSerializer.SerializerTrimmerWarning)] + [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] public bool CanExport(Type type) { if (type == null) From 1c1ee28d3a990f941aed6bba91311ab78345a0c1 Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Mon, 19 Apr 2021 10:39:18 -0700 Subject: [PATCH 09/10] Addressing some nits --- .../Runtime/Serialization/PrimitiveDataContract.cs | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs index fea34e7456af67..44ab2a3b3b4897 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs @@ -14,18 +14,7 @@ namespace System.Runtime.Serialization { internal abstract class PrimitiveDataContract : DataContract { - internal static PrimitiveDataContract? s_NullContract; - internal static PrimitiveDataContract NullContract - { - get - { - if (s_NullContract == null) - { - s_NullContract = new NullPrimitiveDataContract(); - } - return s_NullContract; - } - } + internal static readonly PrimitiveDataContract NullContract = new NullPrimitiveDataContract(); private readonly PrimitiveDataContractCriticalHelper _helper; @@ -68,7 +57,6 @@ public override XmlDictionaryString? TopLevelElementNamespace internal MethodInfo XmlFormatWriterMethod { - [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)] get { From dc09fcf95b9c80000460257a710c95d48f4746ad Mon Sep 17 00:00:00 2001 From: Jose Perez Rodriguez Date: Mon, 19 Apr 2021 12:28:02 -0700 Subject: [PATCH 10/10] Fix typo and remove unnecesary usings --- .../src/System/Runtime/Serialization/AccessorBuilder.cs | 3 +-- .../src/System/Runtime/Serialization/ClassDataContract.cs | 1 - .../src/System/Runtime/Serialization/CollectionDataContract.cs | 1 - .../src/System/Runtime/Serialization/DataContract.cs | 1 - .../src/System/Runtime/Serialization/DataContractResolver.cs | 1 - .../src/System/Runtime/Serialization/DataContractSerializer.cs | 1 - .../src/System/Runtime/Serialization/DataContractSet.cs | 1 - .../Runtime/Serialization/DataContractSurrogateCaller.cs | 1 - .../src/System/Runtime/Serialization/DataMember.cs | 1 - .../src/System/Runtime/Serialization/EnumDataContract.cs | 1 - .../Runtime/Serialization/GenericParameterDataContract.cs | 1 - .../src/System/Runtime/Serialization/Globals.cs | 1 - .../Runtime/Serialization/Json/JsonFormatGeneratorStatics.cs | 2 +- .../Runtime/Serialization/Json/JsonReaderWriterFactory.cs | 1 - .../Json/XmlObjectSerializerReadContextComplexJson.cs | 1 - .../Runtime/Serialization/KnownTypeDataContractResolver.cs | 1 - .../src/System/Runtime/Serialization/PrimitiveDataContract.cs | 1 - .../src/System/Runtime/Serialization/ReflectionClassWriter.cs | 1 - .../src/System/Runtime/Serialization/ReflectionReader.cs | 1 - .../System/Runtime/Serialization/ReflectionXmlFormatReader.cs | 1 - .../System/Runtime/Serialization/ReflectionXmlFormatWriter.cs | 1 - .../src/System/Runtime/Serialization/SchemaExporter.cs | 1 - .../src/System/Runtime/Serialization/SurrogateDataContract.cs | 1 - .../src/System/Runtime/Serialization/XPathQueryGenerator.cs | 1 - .../src/System/Runtime/Serialization/XmlDataContract.cs | 1 - .../System/Runtime/Serialization/XmlFormatGeneratorStatics.cs | 1 - .../System/Runtime/Serialization/XmlFormatReaderGenerator.cs | 1 - .../System/Runtime/Serialization/XmlFormatWriterGenerator.cs | 1 - .../src/System/Runtime/Serialization/XmlObjectSerializer.cs | 1 - .../System/Runtime/Serialization/XmlObjectSerializerContext.cs | 3 +-- .../Runtime/Serialization/XmlObjectSerializerReadContext.cs | 1 - .../Serialization/XmlObjectSerializerReadContextComplex.cs | 1 - .../Runtime/Serialization/XmlObjectSerializerWriteContext.cs | 1 - .../Serialization/XmlObjectSerializerWriteContextComplex.cs | 1 - .../System/Runtime/Serialization/XsdDataContractExporter.cs | 1 - 35 files changed, 3 insertions(+), 37 deletions(-) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/AccessorBuilder.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/AccessorBuilder.cs index ae7e2147b22b2d..6dbb9d6196b8bf 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/AccessorBuilder.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/AccessorBuilder.cs @@ -7,7 +7,6 @@ using System.Linq; using System.Reflection; using System.Runtime.Serialization; -using System.Runtime.Serialization.Json; using System.Text; using System.Threading.Tasks; @@ -26,7 +25,7 @@ internal static class FastInvokerBuilder private static readonly MethodInfo s_make = typeof(FastInvokerBuilder).GetMethod(nameof(Make), BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static)!; [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2060:MakeGenericMethod", - Justification = "The call to MakeGenericMethod is safe due to the fact that we are preserving the constructors of type wich is what Make() is doing.")] + Justification = "The call to MakeGenericMethod is safe due to the fact that we are preserving the constructors of type which is what Make() is doing.")] public static Func GetMakeNewInstanceFunc( [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] Type type) diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs index cb9a636e72072d..410ca8825098ee 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ClassDataContract.cs @@ -18,7 +18,6 @@ namespace System.Runtime.Serialization using DataContractDictionary = System.Collections.Generic.Dictionary; using System.Linq; using System.Diagnostics.CodeAnalysis; - using System.Runtime.Serialization.Json; internal sealed class ClassDataContract : DataContract { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs index 9564644282768f..f5ecf0a48e1cb4 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/CollectionDataContract.cs @@ -16,7 +16,6 @@ namespace System.Runtime.Serialization using DataContractDictionary = System.Collections.Generic.Dictionary; using System.Security; using System.Diagnostics.CodeAnalysis; - using System.Runtime.Serialization.Json; // The interface is a perf optimization. // Only KeyValuePairAdapter should implement the interface. diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs index b1284c1a77e5ed..2c67bd0c3518ff 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs @@ -18,7 +18,6 @@ namespace System.Runtime.Serialization using System.Collections.Concurrent; using System.Diagnostics.CodeAnalysis; using System.Diagnostics; - using System.Runtime.Serialization.Json; internal abstract class DataContract { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractResolver.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractResolver.cs index 696211f216ae46..2b9345dc2c5f23 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractResolver.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractResolver.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics.CodeAnalysis; -using System.Runtime.Serialization.Json; using System.Xml; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSerializer.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSerializer.cs index fac96571ee397f..71f4530f4f3d17 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSerializer.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSerializer.cs @@ -16,7 +16,6 @@ namespace System.Runtime.Serialization using System.Runtime.CompilerServices; using DataContractDictionary = System.Collections.Generic.Dictionary; using System.Diagnostics.CodeAnalysis; - using System.Runtime.Serialization.Json; public sealed class DataContractSerializer : XmlObjectSerializer { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSet.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSet.cs index e24d9c44a63db5..61567c4faacf77 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSet.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSet.cs @@ -7,7 +7,6 @@ using System.Text; using DataContractDictionary = System.Collections.Generic.Dictionary; using System.Diagnostics.CodeAnalysis; -using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSurrogateCaller.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSurrogateCaller.cs index 208cd8301cdaa2..7ce7f2c33781b0 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSurrogateCaller.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContractSurrogateCaller.cs @@ -8,7 +8,6 @@ namespace System.Runtime.Serialization using System.Reflection; using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; - using System.Runtime.Serialization.Json; internal static class DataContractSurrogateCaller { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs index a44412c20829d9..5d2ccfa43136a6 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataMember.cs @@ -9,7 +9,6 @@ using System.Xml; using System.Security; using System.Diagnostics.CodeAnalysis; -using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/EnumDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/EnumDataContract.cs index 665c4d13e99f2c..a340de1f516441 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/EnumDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/EnumDataContract.cs @@ -12,7 +12,6 @@ using System.Security; using System.Linq; using System.Diagnostics.CodeAnalysis; -using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/GenericParameterDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/GenericParameterDataContract.cs index 6f44245b30809e..8f5bd20805c9de 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/GenericParameterDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/GenericParameterDataContract.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Globals.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Globals.cs index 528641d647e23c..02cd2281a8d789 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Globals.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Globals.cs @@ -12,7 +12,6 @@ using System.Linq; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; -using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatGeneratorStatics.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatGeneratorStatics.cs index 90d894e7d176b5..d7f05cd947be5b 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatGeneratorStatics.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonFormatGeneratorStatics.cs @@ -4,10 +4,10 @@ using System; using System.Collections; using System.Reflection; -using System.Runtime.Serialization.Json; using System.Xml; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonReaderWriterFactory.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonReaderWriterFactory.cs index 888c613a188eed..1f83baca5a5410 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonReaderWriterFactory.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonReaderWriterFactory.cs @@ -6,7 +6,6 @@ using System.Text; using System.Xml; using System.IO; -using System.Runtime.Serialization.Json; using System.Runtime.CompilerServices; namespace System.Runtime.Serialization.Json diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerReadContextComplexJson.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerReadContextComplexJson.cs index f66422234e59f3..d571c7325c48c6 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerReadContextComplexJson.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/XmlObjectSerializerReadContextComplexJson.cs @@ -6,7 +6,6 @@ using System.Text; using System.Reflection; using System.Xml; -using System.Runtime.Serialization.Json; using System.Runtime.Serialization; using DataContractDictionary = System.Collections.Generic.Dictionary; using System.Diagnostics; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/KnownTypeDataContractResolver.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/KnownTypeDataContractResolver.cs index 6efa35ada1c54c..ab1d030913b578 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/KnownTypeDataContractResolver.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/KnownTypeDataContractResolver.cs @@ -4,7 +4,6 @@ using System.Xml; using System.Reflection; using System.Diagnostics.CodeAnalysis; -using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs index 44ab2a3b3b4897..8793954253a002 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/PrimitiveDataContract.cs @@ -7,7 +7,6 @@ using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Reflection; -using System.Runtime.Serialization.Json; using System.Xml; namespace System.Runtime.Serialization diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionClassWriter.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionClassWriter.cs index 396f04faa702af..c8f5f5829d27be 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionClassWriter.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionClassWriter.cs @@ -8,7 +8,6 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; -using System.Runtime.Serialization.Json; using System.Text; using System.Threading.Tasks; using System.Xml; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs index 2a92a3ce0162cc..f6681798f741e4 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionReader.cs @@ -8,7 +8,6 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; -using System.Runtime.Serialization.Json; using System.Text; using System.Threading.Tasks; using System.Xml; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatReader.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatReader.cs index 433e003a7cd5cd..98e3c1ea9a4ff0 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatReader.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatReader.cs @@ -11,7 +11,6 @@ using System.Security; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; -using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatWriter.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatWriter.cs index c761757dc8d1f2..db84e5793c4d29 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatWriter.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/ReflectionXmlFormatWriter.cs @@ -7,7 +7,6 @@ using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Reflection.Emit; -using System.Runtime.Serialization.Json; using System.Xml; namespace System.Runtime.Serialization diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SchemaExporter.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SchemaExporter.cs index 9ae592952f8fb9..48dccee71f7bad 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SchemaExporter.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SchemaExporter.cs @@ -10,7 +10,6 @@ using System.Globalization; using System.IO; using System.Reflection; -using System.Runtime.Serialization.Json; using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SurrogateDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SurrogateDataContract.cs index 8a53ac4d1ff6e7..f4322c2713b23d 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SurrogateDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/SurrogateDataContract.cs @@ -8,7 +8,6 @@ namespace System.Runtime.Serialization using System.Runtime.CompilerServices; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; - using System.Runtime.Serialization.Json; internal sealed class SurrogateDataContract : DataContract { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XPathQueryGenerator.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XPathQueryGenerator.cs index 2eb15a5cfa0a2b..b3cd0339cddf31 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XPathQueryGenerator.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XPathQueryGenerator.cs @@ -8,7 +8,6 @@ using System.Collections.Generic; using System.Xml; using System.Diagnostics.CodeAnalysis; -using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlDataContract.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlDataContract.cs index d5f37095e3c43f..14730cade79926 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlDataContract.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlDataContract.cs @@ -15,7 +15,6 @@ namespace System.Runtime.Serialization using System.Linq; using System.Runtime.CompilerServices; using System.Diagnostics.CodeAnalysis; - using System.Runtime.Serialization.Json; internal delegate IXmlSerializable CreateXmlSerializableDelegate(); internal sealed class XmlDataContract : DataContract diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs index 61d534ebeab6f3..a20918b486f07d 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatGeneratorStatics.cs @@ -6,7 +6,6 @@ using System.Collections; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; -using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatReaderGenerator.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatReaderGenerator.cs index 5ad3e85d06feb3..acdbdfe00db912 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatReaderGenerator.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatReaderGenerator.cs @@ -13,7 +13,6 @@ using System.Runtime.CompilerServices; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; -using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatWriterGenerator.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatWriterGenerator.cs index a8f607a5fbe63d..b8d4c22bab0e37 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatWriterGenerator.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlFormatWriterGenerator.cs @@ -13,7 +13,6 @@ using System.Runtime.CompilerServices; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; -using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializer.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializer.cs index 5066ff554d64e0..011d03454e7608 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializer.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializer.cs @@ -13,7 +13,6 @@ namespace System.Runtime.Serialization using System.Security; using DataContractDictionary = System.Collections.Generic.Dictionary; using System.Diagnostics.CodeAnalysis; - using System.Runtime.Serialization.Json; public abstract class XmlObjectSerializer { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerContext.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerContext.cs index 44a072448671d0..9323ae87acaa25 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerContext.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerContext.cs @@ -8,8 +8,7 @@ namespace System.Runtime.Serialization using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Reflection; - using System.Runtime.Serialization.Json; - using System.Security; + using System.Security; using System.Xml; using DataContractDictionary = System.Collections.Generic.Dictionary; diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContext.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContext.cs index 0cb500df1f1ad0..4ba8da9b6cc303 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContext.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContext.cs @@ -13,7 +13,6 @@ namespace System.Runtime.Serialization using System.Security; using DataContractDictionary = System.Collections.Generic.Dictionary; using System.Diagnostics.CodeAnalysis; - using System.Runtime.Serialization.Json; internal class XmlObjectSerializerReadContext : XmlObjectSerializerContext { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs index 0e439dfe99dcee..65d6c1491a488f 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs @@ -4,7 +4,6 @@ using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Reflection; -using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs index e48ab7816898d9..48273f9792204b 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs @@ -15,7 +15,6 @@ using System.Runtime.CompilerServices; using ExtensionDataObject = System.Object; using System.Diagnostics.CodeAnalysis; -using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContextComplex.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContextComplex.cs index 513e6a69646b1b..dfa8221e6829d7 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContextComplex.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContextComplex.cs @@ -13,7 +13,6 @@ using System.Security; using System.Runtime.CompilerServices; using System.Diagnostics.CodeAnalysis; -using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization { diff --git a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XsdDataContractExporter.cs b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XsdDataContractExporter.cs index db8b5f510e8c8d..0c18636e7846f7 100644 --- a/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XsdDataContractExporter.cs +++ b/src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XsdDataContractExporter.cs @@ -8,7 +8,6 @@ using System.Reflection; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; -using System.Runtime.Serialization.Json; namespace System.Runtime.Serialization {