public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var output = new Result.OutputDto();
            var key    = "";

            while (reader.Read())
            {
                if (reader.TokenType == JsonToken.PropertyName)
                {
                    key = reader.Value.ToString();
                }

                if (reader.TokenType == JsonToken.Date || reader.TokenType == JsonToken.String)
                {
                    output.SingleValues.Add(ReadProperty(reader, key));
                }

                if (reader.TokenType == JsonToken.StartObject)
                {
                    var    complex    = new ComplexValueResult();
                    string currentKey = null;

                    while (reader.Read())
                    {
                        if (reader.TokenType == JsonToken.EndObject)
                        {
                            break;
                        }

                        if (reader.TokenType == JsonToken.PropertyName)
                        {
                            currentKey = reader.Value.ToString();
                        }

                        if (reader.TokenType == JsonToken.String)
                        {
                            complex.SingleValues.Add(ReadProperty(reader, currentKey));
                        }
                    }

                    output.ComplexValues.Add(key, complex);
                }

                if (reader.TokenType == JsonToken.StartArray)
                {
                    var multiValue = ReadArray(reader);

                    output.MultiValues.Add(key, multiValue);
                }
            }

            return(output);
        }
 public QuestionDto(string type)
 {
     Type   = type;
     Input  = new List <XElement>();
     Output = new OutputDto();
 }