Пример #1
0
 public ResultParserGenerator(ClientGeneratorOptions options)
 {
     _options = options
                ?? throw new ArgumentNullException(nameof(options));
     _desMethodGenerator = new ResultParserDeserializeMethodGenerator(
         options.LanguageVersion);
 }
Пример #2
0
        private async Task WriteObjectPropertyDeserializationAsync(
            CodeWriter writer,
            IResultParserTypeDescriptor possibleType,
            string jsonElement,
            ITypeLookup typeLookup)
        {
            for (int i = 0; i < possibleType.ResultDescriptor.Fields.Count; i++)
            {
                IFieldDescriptor fieldDescriptor = possibleType.ResultDescriptor.Fields[i];

                await writer.WriteIndentAsync();

                if (fieldDescriptor.Type.NamedType().IsLeafType())
                {
                    ITypeInfo typeInfo = typeLookup.GetTypeInfo(
                        fieldDescriptor.Type,
                        true);

                    string deserializeMethod =
                        ResultParserDeserializeMethodGenerator.CreateDeserializerName(
                            fieldDescriptor.Type);

                    await writer.WriteAsync(deserializeMethod);

                    await writer.WriteAsync('(');

                    await writer.WriteAsync(jsonElement);

                    await writer.WriteAsync(", \"");

                    await writer.WriteAsync(fieldDescriptor.ResponseName);

                    await writer.WriteAsync("\")");
                }
                else
                {
                    await writer.WriteAsync("Parse");

                    await writer.WriteAsync(GetPathName(fieldDescriptor.Path));

                    await writer.WriteAsync('(');

                    await writer.WriteAsync(jsonElement);

                    await writer.WriteAsync(", \"");

                    await writer.WriteAsync(fieldDescriptor.ResponseName);

                    await writer.WriteAsync("\")");
                }

                if (i < possibleType.ResultDescriptor.Fields.Count - 1)
                {
                    await writer.WriteAsync(',');
                }

                await writer.WriteLineAsync();
            }
        }
        private async Task WriteObjectPropertyDeserializationAsync(
            CodeWriter writer,
            IResultParserTypeDescriptor possibleType,
            string jsonElement,
            string entityField,
            ITypeLookup typeLookup)
        {
            foreach (IFieldDescriptor fieldDescriptor in possibleType.ResultDescriptor.Fields)
            {
                await writer.WriteIndentAsync();

                await writer.WriteAsync(entityField);

                await writer.WriteAsync('.');

                await writer.WriteAsync(GetPropertyName(fieldDescriptor.ResponseName));

                await writer.WriteAsync(" = ");

                if (fieldDescriptor.Type.NamedType().IsLeafType())
                {
                    ITypeInfo typeInfo = typeLookup.GetTypeInfo(
                        fieldDescriptor.Type,
                        true);

                    string deserializeMethod =
                        ResultParserDeserializeMethodGenerator.CreateDeserializerName(typeInfo);

                    await writer.WriteAsync('(');

                    await writer.WriteAsync(typeInfo.ClrTypeName);

                    await writer.WriteAsync(')');

                    await writer.WriteAsync(deserializeMethod);

                    await writer.WriteAsync('(');

                    await writer.WriteAsync(jsonElement);

                    await writer.WriteAsync(", \"");

                    await writer.WriteAsync(fieldDescriptor.ResponseName);

                    await writer.WriteAsync("\");");
                }
                else
                {
                    await writer.WriteAsync("Parse");

                    await writer.WriteAsync(GetPathName(fieldDescriptor.Path));

                    await writer.WriteAsync('(');

                    await writer.WriteAsync(jsonElement);

                    await writer.WriteAsync(", \"");

                    await writer.WriteAsync(fieldDescriptor.ResponseName);

                    await writer.WriteAsync("\");");
                }

                await writer.WriteLineAsync();
            }
        }