ServiceClientGenerator.Member.GetTypeUnmarshallerName C# (CSharp) Method

GetTypeUnmarshallerName() private method

This method gets the name of an unmarshaller for a type. It is used from within DetermineTypeUnmarshallerInstantiate to get the types for the generic declarations of maps and lists.
private GetTypeUnmarshallerName ( JsonData extendedData ) : string
extendedData JsonData The data for the member defined in the shape
return string
        string GetTypeUnmarshallerName(JsonData extendedData)
        {
            // Check to see if customizations is overriding.
            var overrideType = this.model.Customizations.OverrideDataType(OwningShape.Name, this._name);
            if (overrideType != null)
                return overrideType.Unmarshaller;

            var extendsNode = extendedData[ServiceModel.ShapeKey];
            if (extendsNode == null)
                throw new Exception("Missing extends for member " + this._name);

            var memberShape = this.model.DocumentRoot[ServiceModel.ShapesKey][extendsNode.ToString()];
            var typeNode = memberShape[Shape.TypeKey];
            if (typeNode == null)
                throw new Exception("Type is missing for shape " + extendsNode.ToString());

            switch (typeNode.ToString())
            {
                case "string":
                    return "StringUnmarshaller";
                case "blob":
                    return "MemoryStreamUnmarshaller";
                case "boolean":
                    return "BoolUnmarshaller";
                case "double":
                    return "DoubleUnmarshaller";
                case "float":
                    return "FloatUnmarshaller";
                case "integer":
                    return "IntUnmarshaller";
                case "long":
                    return "LongUnmarshaller";
                case "timestamp":
                    return "DateTimeUnmarshaller";
                case "structure":
                    var shapeName = extendsNode.ToString();
                    var renamedShape = this.model.Customizations.GetOverrideShapeName(shapeName);
                    var substitutedShape = this.model.Customizations.GetSubstituteShapeName(shapeName);
                    if (!string.IsNullOrWhiteSpace(renamedShape))
                    {
                        shapeName = renamedShape;
                    }
                    else if(!string.IsNullOrWhiteSpace(substitutedShape))
                    {
                        shapeName = substitutedShape;
                    }
                    return shapeName + "Unmarshaller";
                case "map":
                    var keyType = DetermineType(memberShape[Shape.KeyKey], true);
                    var keyTypeUnmarshaller = GetTypeUnmarshallerName(memberShape[Shape.KeyKey]);
                    var valueType = DetermineType(memberShape[Shape.ValueKey], true);
                    var valueTypeUnmarshaller = GetTypeUnmarshallerName(memberShape[Shape.ValueKey]);

                    return string.Format("DictionaryUnmarshaller<{0}, {1}, {2}, {3}>",
                        keyType, valueType, keyTypeUnmarshaller, valueTypeUnmarshaller);
                case "list":
                    var listType = DetermineType(memberShape[Member.MemberKey], true);
                    var listTypeUnmarshaller = GetTypeUnmarshallerName(memberShape[Member.MemberKey]);

                    return string.Format("ListUnmarshaller<{0}, {1}>",
                        listType, listTypeUnmarshaller);

                default:
                    throw new Exception("Unknown type " + typeNode.ToString());
            }
        }