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(); } }