当前位置: 首页>>代码示例>>C#>>正文


C# FieldDescriptor.ChildClassDescriptor方法代码示例

本文整理汇总了C#中FieldDescriptor.ChildClassDescriptor方法的典型用法代码示例。如果您正苦于以下问题:C# FieldDescriptor.ChildClassDescriptor方法的具体用法?C# FieldDescriptor.ChildClassDescriptor怎么用?C# FieldDescriptor.ChildClassDescriptor使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在FieldDescriptor的用法示例。


在下文中一共展示了FieldDescriptor.ChildClassDescriptor方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: GetSubRoot

        /// <summary>
        /// 
        /// </summary>
        /// <param name="currentFieldDescriptor"></param>
        /// <param name="tagName"></param>
        /// <param name="simplId"></param>
        /// <returns></returns>
        private object GetSubRoot(FieldDescriptor currentFieldDescriptor, string tagName, out string simplId)
        {
            _jsonReader.Read();
            Object subRoot  = null;
            simplId         = null;

            if(_jsonReader.Value != null && _jsonReader.Value.ToString().Equals(TranslationContext.JsonSimplRef))
            {
                _jsonReader.Read();
                simplId = _jsonReader.Value.ToString();
                var referencedObject = translationContext.GetFromMap(simplId);
                if (referencedObject != null)
                {
                    subRoot = referencedObject;
                }
                _jsonReader.Read();
            }
            else
            {
                ClassDescriptor subRootClassDescriptor = currentFieldDescriptor.ChildClassDescriptor(tagName);
                if (subRootClassDescriptor != null)
                {
                    subRoot = subRootClassDescriptor.GetInstance();

                    if (subRoot != null)
                    {
                        DeserializationPreHook(subRoot, translationContext);
                        if (deserializationHookStrategy != null)
                            deserializationHookStrategy.DeserializationPreHook(subRoot, currentFieldDescriptor);

                        DeserializeObjectFields(subRoot, subRootClassDescriptor);
                    }
                    else
                    {
                        Debug.WriteLine("Skipping tag: " + tagName + ". Failed to create a new instance of  " + currentFieldDescriptor.Name);

                        var newObject = 1;
                        while (_jsonReader.TokenType != JsonToken.EndObject || newObject > 0)
                        {
                            _jsonReader.Read();

                            if (_jsonReader.TokenType == JsonToken.StartObject)
                                newObject++;
                            else if (_jsonReader.TokenType == JsonToken.EndObject)
                                newObject--;

                        }
                    }
                }
                else
                {
                    Debug.WriteLine("skipping tag: " + tagName + ". not assignable to " + currentFieldDescriptor.Name);
                }

            }

            return subRoot;
        }
开发者ID:ecologylab,项目名称:simplCSharp,代码行数:65,代码来源:JsonPullDeserializer.cs

示例2: DeserializeComposite

        /// <summary>
        /// 
        /// </summary>
        /// <param name="root"></param>
        /// <param name="currentFieldDescriptor"></param>
        private void DeserializeComposite(object root, FieldDescriptor currentFieldDescriptor)
        {
            //while (_jsonReader.Value == null && _jsonReader.TokenType != JsonToken.EndObject)
            //_jsonReader.Read();

            String tagName = (_jsonReader.Value != null) ? _jsonReader.Value.ToString() : null;
            ClassDescriptor subRootClassDescriptor = currentFieldDescriptor.ChildClassDescriptor(tagName);
            _jsonReader.Read();
            if (subRootClassDescriptor != null && _jsonReader.TokenType == JsonToken.StartObject)
            {
                string simplId;
                var subRoot = GetSubRoot(currentFieldDescriptor, tagName, out simplId);
                if (subRoot != null)
                    currentFieldDescriptor.SetFieldToComposite(root, subRoot);
                else if (simplId != null)
                {
                    translationContext.RefObjectNeedsIdResolve(root, currentFieldDescriptor, simplId);
                }
            }
            else
            {
                Debug.WriteLine("ignore tag: " + tagName + ". expected different tag while deserializing composite.");
                _jsonReader.Skip();
            }
        }
开发者ID:ecologylab,项目名称:simplCSharp,代码行数:30,代码来源:JsonPullDeserializer.cs

示例3: DeserializeCompositeCollection

        /// <summary>
        /// 
        /// </summary>
        /// <param name="root"></param>
        /// <param name="currentFieldDescriptor"></param>
        private void DeserializeCompositeCollection(object root, FieldDescriptor currentFieldDescriptor)
        {
            // advance to StartArray token
            _jsonReader.Read();

            var oldFormat = HandleBackwardsCompatabilityForDoubleWrappedCollections();

            int collectionCountIncludingRefs = 0;

            // advance to first StartObject token
            _jsonReader.Read();

            while (_jsonReader.TokenType != JsonToken.EndArray)
            {
                var tagName = currentFieldDescriptor.CollectionOrMapTagName;

                if (currentFieldDescriptor.IsPolymorphic)
                {
                    // advance to Property token
                    _jsonReader.Read();
                    tagName = _jsonReader.Value.ToString();

                    ClassDescriptor subRootClassDescriptor = currentFieldDescriptor.ChildClassDescriptor(tagName);
                    if (subRootClassDescriptor == null)
                    {
                        Debug.WriteLine("skipping tag: " + tagName + ". not assignable to " + currentFieldDescriptor.Name);
                        _jsonReader.Skip();
                        _jsonReader.Read();
                        continue;
                    }

                    // advance past wrap tag to StartObject token
                    _jsonReader.Read();
                }

                DeserializeAndAddToCollection(root, currentFieldDescriptor, tagName, collectionCountIncludingRefs);
                collectionCountIncludingRefs++;

                if (currentFieldDescriptor.IsPolymorphic)
                    _jsonReader.Read();

                _jsonReader.Read();

            }

            if (oldFormat)
                _jsonReader.Read();
        }
开发者ID:ecologylab,项目名称:simplCSharp,代码行数:53,代码来源:JsonPullDeserializer.cs

示例4: GetSubRoot

        /// <summary>
        /// 
        /// </summary>
        /// <param name="currentFieldDescriptor"></param>
        /// <param name="currentTagName"></param>
        /// <param name="root"> </param>
        /// <returns></returns>
        private object GetSubRoot(FieldDescriptor currentFieldDescriptor, string currentTagName, object root)
        {
            Object subRoot;
            ClassDescriptor subRootClassDescriptor = currentFieldDescriptor.ChildClassDescriptor(currentTagName);

            String simplReference;
            if ((simplReference = GetSimplReference()) != null)
            {
                subRoot = translationContext.GetFromMap(simplReference);
                if (subRoot == null)
                {
                    Debug.WriteLine("Cannot find simpl:ref " + simplReference);
                }
                return subRoot;
            }

            if(subRootClassDescriptor == null)
            {
                Debug.WriteLine("ignoring element: " + currentTagName);
                //_xmlReader.Skip();
                return null;
            }

            subRoot = subRootClassDescriptor.GetInstance();

            DeserializationPreHook(subRoot, translationContext);
            if (deserializationHookStrategy != null)
                deserializationHookStrategy.DeserializationPreHook(subRoot, currentFieldDescriptor);

            if (subRoot != null)
            {
                if (subRoot is ElementState && root is ElementState)
                {
                    ((ElementState) subRoot).Parent = root as ElementState;
                }
            }

            DeserializeAttributes(subRoot, subRootClassDescriptor);

            if (!_xmlReader.IsEmptyElement)
            {
                CreateObjectModel(subRoot, subRootClassDescriptor, currentTagName);
            }
            else
            {
                DeserializationPostHook(subRoot, translationContext);
                if (deserializationHookStrategy != null)
                    deserializationHookStrategy.DeserializationPostHook(subRoot, null);
            }

            return subRoot;
        }
开发者ID:ecologylab,项目名称:simplCSharp,代码行数:59,代码来源:XMLPullDeserializer.cs


注:本文中的FieldDescriptor.ChildClassDescriptor方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。