File: System\ComponentModel\Design\Serialization\CodeDomComponentSerializationService.CodeDomSerializationStore.ObjectData.cs
Web Access
Project: src\src\System.Windows.Forms.Design\src\System.Windows.Forms.Design.csproj (System.Windows.Forms.Design)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace System.ComponentModel.Design.Serialization;
 
public sealed partial class CodeDomComponentSerializationService
{
    private sealed partial class CodeDomSerializationStore
    {
        /// <summary>
        ///  We create one of these for each object we process.
        /// </summary>
        private class ObjectData
        {
            private bool _entireObject;
            private List<MemberData>? _members;
 
            /// <summary>
            ///  The object value we're serializing.
            /// </summary>
            internal readonly object _value;
 
            public ObjectData(string name, object value)
            {
                _value = value;
                _name = name;
            }
 
            /// <summary>
            ///  The name of the object we're serializing.
            /// </summary>
            internal readonly string _name;
 
            /// <summary>
            ///  If true, the entire object should be serialized. If false, only the members in the member list should be serialized.
            /// </summary>
            internal bool EntireObject
            {
                get => _entireObject;
                set
                {
                    if (value && _members is not null)
                    {
                        _members.Clear();
                    }
 
                    _entireObject = value;
                }
            }
 
            /// <summary>
            ///  If <see langword="true"/>, the object should be serialized such that during deserialization
            ///  to an existing object the object is reconstructed entirely.
            ///  If <see langword="false"/>, serialize normally
            /// </summary>
            internal bool Absolute { get; set; }
 
            /// <summary>
            ///  A list of MemberData objects representing specific members that should be serialized.
            /// </summary>
            internal IList<MemberData> Members => _members ??= [];
        }
 
        /// <summary>
        ///  We create one of these for each specific member on an object.
        /// </summary>
        private class MemberData
        {
            /// <summary>
            ///  The member we're serializing.
            /// </summary>
            internal readonly MemberDescriptor _member;
 
            /// <summary>
            ///  True if we should try to serialize values that contain their defaults as well.
            /// </summary>
            internal readonly bool _absolute;
 
            /// <summary>
            ///  Creates a new member data ready to be serialized.
            /// </summary>
            internal MemberData(MemberDescriptor member, bool absolute)
            {
                _member = member;
                _absolute = absolute;
            }
        }
    }
}