private static void ReadBoundAttribute(BoundAttributeDescriptorBuilder builder, JObject attribute, JsonSerializer serializer)
        {
            var descriptorKind           = attribute[nameof(BoundAttributeDescriptor.Kind)].Value <string>();
            var name                     = attribute[nameof(BoundAttributeDescriptor.Name)].Value <string>();
            var typeName                 = attribute[nameof(BoundAttributeDescriptor.TypeName)].Value <string>();
            var isEnum                   = attribute[nameof(BoundAttributeDescriptor.IsEnum)].Value <bool>();
            var indexerNamePrefix        = attribute[nameof(BoundAttributeDescriptor.IndexerNamePrefix)].Value <string>();
            var indexerTypeName          = attribute[nameof(BoundAttributeDescriptor.IndexerTypeName)].Value <string>();
            var documentation            = attribute[nameof(BoundAttributeDescriptor.Documentation)].Value <string>();
            var diagnostics              = attribute[nameof(BoundAttributeDescriptor.Diagnostics)].Value <JArray>();
            var metadata                 = attribute[nameof(BoundAttributeDescriptor.Metadata)].Value <JObject>();
            var boundAttributeParameters = attribute[nameof(BoundAttributeDescriptor.BoundAttributeParameters)].Value <JArray>();

            builder.Name          = name;
            builder.TypeName      = typeName;
            builder.Documentation = documentation;

            if (indexerNamePrefix != null)
            {
                builder.AsDictionary(indexerNamePrefix, indexerTypeName);
            }

            if (isEnum)
            {
                builder.IsEnum = true;
            }

            foreach (var diagnostic in diagnostics)
            {
                var diagnosticReader = diagnostic.CreateReader();
                var diagnosticObject = serializer.Deserialize <RazorDiagnostic>(diagnosticReader);
                builder.Diagnostics.Add(diagnosticObject);
            }

            var metadataReader = metadata.CreateReader();
            var metadataValue  = serializer.Deserialize <Dictionary <string, string> >(metadataReader);

            foreach (var item in metadataValue)
            {
                builder.Metadata[item.Key] = item.Value;
            }

            foreach (var boundAttributeParameter in boundAttributeParameters)
            {
                var parameter = boundAttributeParameter.Value <JObject>();
                builder.BindAttributeParameter(b => ReadBoundAttributeParameter(b, parameter, serializer));
            }
        }
예제 #2
0
    private static void ReadBoundAttribute(BoundAttributeDescriptorBuilder builder, JObject attribute, JsonSerializer serializer)
    {
        attribute["Kind"].Value <string>();
        string  name          = attribute["Name"].Value <string>();
        string  typeName      = attribute["TypeName"].Value <string>();
        bool    flag          = attribute["IsEnum"].Value <bool>();
        string  text          = attribute["IndexerNamePrefix"].Value <string>();
        string  valueTypeName = attribute["IndexerTypeName"].Value <string>();
        string  documentation = attribute["Documentation"].Value <string>();
        JArray  jArray        = attribute["Diagnostics"].Value <JArray>();
        JObject jObject       = attribute["Metadata"].Value <JObject>();
        JArray  jArray2       = attribute["BoundAttributeParameters"].Value <JArray>();

        builder.Name          = name;
        builder.TypeName      = typeName;
        builder.Documentation = documentation;
        if (text != null)
        {
            builder.AsDictionary(text, valueTypeName);
        }
        if (flag)
        {
            builder.IsEnum = true;
        }
        foreach (JToken item2 in jArray)
        {
            JsonReader      reader = item2.CreateReader();
            RazorDiagnostic item   = serializer.Deserialize <RazorDiagnostic>(reader);
            builder.Diagnostics.Add(item);
        }
        JsonReader reader2 = jObject.CreateReader();

        foreach (KeyValuePair <string, string> item3 in serializer.Deserialize <Dictionary <string, string> >(reader2))
        {
            builder.Metadata[item3.Key] = item3.Value;
        }
        foreach (JToken item4 in jArray2)
        {
            JObject parameter = item4.Value <JObject>();
            builder.BindAttributeParameter(delegate(BoundAttributeParameterDescriptorBuilder b)
            {
                ReadBoundAttributeParameter(b, parameter, serializer);
            });
        }
    }
        private static void ReadBoundAttributeParameter(JsonReader reader, BoundAttributeDescriptorBuilder builder)
        {
            if (!reader.Read())
            {
                return;
            }

            if (reader.TokenType != JsonToken.StartObject)
            {
                return;
            }

            builder.BindAttributeParameter(parameter =>
            {
                reader.ReadProperties(propertyName =>
                {
                    switch (propertyName)
                    {
                    case nameof(BoundAttributeParameterDescriptor.Name):
                        if (reader.Read())
                        {
                            var name       = (string)reader.Value;
                            parameter.Name = name;
                        }
                        break;

                    case nameof(BoundAttributeParameterDescriptor.TypeName):
                        if (reader.Read())
                        {
                            var typeName       = (string)reader.Value;
                            parameter.TypeName = typeName;
                        }
                        break;

                    case nameof(BoundAttributeParameterDescriptor.IsEnum):
                        if (reader.Read())
                        {
                            var isEnum       = (bool)reader.Value;
                            parameter.IsEnum = isEnum;
                        }
                        break;

                    case nameof(BoundAttributeParameterDescriptor.Documentation):
                        if (reader.Read())
                        {
                            var documentation       = (string)reader.Value;
                            parameter.Documentation = documentation;
                        }
                        break;

                    case nameof(BoundAttributeParameterDescriptor.Metadata):
                        ReadMetadata(reader, parameter.Metadata);
                        break;

                    case nameof(BoundAttributeParameterDescriptor.Diagnostics):
                        ReadDiagnostics(reader, parameter.Diagnostics);
                        break;
                    }
                });
            });
        }