예제 #1
0
        internal TypeMetadata(string metadataCode, TypeMetadata parent)
        {
            this.MetadataCode = metadataCode;
            this.Parent       = parent;
            this.Index        = parent.Index;
            this.Root         = new ObjectEntry(this);

            var dto = DTObject.CreateReusable(metadataCode);

            this.Entries = Parse(dto.GetRoot());
        }
예제 #2
0
        public DTObject GetOrCreateObject(string findExp)
        {
            var obj = GetObject(findExp, false);

            if (obj == null)
            {
                obj = this.IsPinned ? DTObject.Create() : DTObject.CreateReusable();
                this.SetObject(findExp, obj);
            }
            return(obj);
        }
예제 #3
0
        /// <summary>
        /// 该构造是一切的起点
        /// </summary>
        /// <param name="metadataCode"></param>
        internal TypeMetadata(string metadataCode)
        {
            this.MetadataCode = metadataCode;
            this.Index        = new TypeIndex();
            this.Root         = new ObjectEntry(this);
            var dto = DTObject.CreateReusable(metadataCode);

            var root = dto.GetRoot();

            //设置了根类型的名称
            this.Root.Name = this.Root.TypeName = root.Name;
            this.Index.Add(this.Root); //对根类型建立索引

            this.Entries = Parse(root);
        }
예제 #4
0
        public DTObject Serialize(object instance, bool isPinned)
        {
            var dto = isPinned ? DTObject.Create() : DTObject.CreateReusable();

            var serializable = instance as IDTOSerializable;

            if (serializable != null)
            {
                serializable.Serialize(dto, string.Empty); //string.Empty意味着 序列化的内容会完全替换dto
            }
            else
            {
                Serialize(instance, dto);
            }
            return(dto);
        }