File: System\Runtime\Serialization\SerializationFieldInfo.cs
Web Access
Project: src\runtime\src\libraries\System.Runtime.Serialization.Formatters\src\System.Runtime.Serialization.Formatters.csproj (System.Runtime.Serialization.Formatters)
// 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;
using System.Globalization;
using System.Reflection;

namespace System.Runtime.Serialization
{
    internal sealed class SerializationFieldInfo : FieldInfo
    {
        private readonly FieldInfo m_field;
        private readonly string m_serializationName;

        internal SerializationFieldInfo(FieldInfo field, string namePrefix)
        {
            Debug.Assert(field != null);
            Debug.Assert(namePrefix != null);

            m_field = field;
            m_serializationName = namePrefix + "+" + m_field.Name;
        }

        internal FieldInfo FieldInfo => m_field;

        public override string Name => m_serializationName;

        // "Name" returns our custom serialization name.
        // All other overrides simply delegate to m_field

        public override Module Module { get { return m_field.Module; } }

        public override int MetadataToken { get { return m_field.MetadataToken; } }

        public override Type? DeclaringType => m_field.DeclaringType;

        public override Type? ReflectedType => m_field.ReflectedType;

        public override object[] GetCustomAttributes(bool inherit) => m_field.GetCustomAttributes(inherit);

        public override object[] GetCustomAttributes(Type attributeType, bool inherit) => m_field.GetCustomAttributes(attributeType, inherit);

        public override bool IsDefined(Type attributeType, bool inherit) => m_field.IsDefined(attributeType, inherit);

        public override Type FieldType => m_field.FieldType;

        public override object? GetValue(object? obj) => m_field.GetValue(obj);

        public override void SetValue(object? obj, object? value, BindingFlags invokeAttr, Binder? binder, CultureInfo? culture) => m_field.SetValue(obj, value, invokeAttr, binder, culture);

        public override RuntimeFieldHandle FieldHandle => m_field.FieldHandle;

        public override FieldAttributes Attributes => m_field.Attributes;
    }
}