public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
		{
			if (reader.TokenType == JsonToken.String)
			{
				return new Attachment { Content = (string)reader.Value };
			}

			if (reader.TokenType == JsonToken.StartObject)
			{
				var attachment = new Attachment();
				while (reader.Read())
				{
					if (reader.TokenType == JsonToken.PropertyName)
					{
						var propertyName = (string)reader.Value;
						switch (propertyName.ToLowerInvariant())
						{
							case "_content":
							case "content":
								attachment.Content = reader.ReadAsString();
								break;
							case "_name":
							case "name":
								attachment.Name = reader.ReadAsString();
								break;
							case "author":
								attachment.Author = reader.ReadAsString();
								break;
							case "keywords":
								attachment.Keywords = reader.ReadAsString();
								break;
							case "date":
								reader.Read();
								switch (reader.TokenType)
								{
									case JsonToken.String:
										var value = (string)reader.Value;
										if (!string.IsNullOrEmpty(value))
											attachment.Date = Convert.ToDateTime(value);
										break;
									case JsonToken.Date:
										attachment.Date = (DateTime?)reader.Value;
										break;
								}
								break;
							case "_content_type":
							case "content_type":
							case "contenttype":
							case "contentType":
								attachment.ContentType = reader.ReadAsString();
								break;
							case "_content_length":
							case "content_length":
							case "contentlength":
							case "contentLength":
								reader.Read();
								switch (reader.TokenType)
								{
									case JsonToken.String:
										var value = (string)reader.Value;
										if (!string.IsNullOrEmpty(value))
											attachment.ContentLength = Convert.ToInt64(value);
										break;
									case JsonToken.Integer:
									case JsonToken.Float:
										attachment.ContentLength = (long?)reader.Value;
										break;

								}
								break;
							case "_language":
							case "language":
								attachment.Language = reader.ReadAsString();
								break;
							case "_detect_language":
								attachment.DetectLanguage = reader.ReadAsBoolean();
								break;
							case "_indexed_chars":
							case "indexed_chars":
								reader.Read();
								switch (reader.TokenType)
								{
									case JsonToken.String:
										var value = (string)reader.Value;
										if (!string.IsNullOrEmpty(value))
											attachment.IndexedCharacters = Convert.ToInt64(value);
										break;
									case JsonToken.Integer:
									case JsonToken.Float:
										attachment.IndexedCharacters = (long?)reader.Value;
										break;

								}
								break;
							case "title":
								attachment.Title = reader.ReadAsString();
								break;
						}
					}
					if (reader.TokenType == JsonToken.EndObject)
					{
						break;
					}
				}
				return attachment;
			}
			return null;
		}
Beispiel #2
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.String)
            {
                return new Attachment {
                           Content = (string)reader.Value
                }
            }
            ;

            if (reader.TokenType == JsonToken.StartObject)
            {
                var attachment = new Attachment();

                while (reader.Read())
                {
                    if (reader.TokenType == JsonToken.PropertyName)
                    {
                        var propertyName = (string)reader.Value;
                        switch (propertyName.ToLowerInvariant())
                        {
                        case "_content":
                        case "content":
                            attachment.Content = reader.ReadAsString();
                            break;

                        case "_name":
                        case "name":
                            attachment.Name = reader.ReadAsString();
                            break;

                        case "author":
                            attachment.Author = reader.ReadAsString();
                            break;

                        case "keywords":
                            attachment.Keywords = reader.ReadAsString();
                            break;

                        case "date":
                            reader.Read();
                            switch (reader.TokenType)
                            {
                            case JsonToken.String:
                                var value = (string)reader.Value;
                                if (!string.IsNullOrEmpty(value))
                                {
                                    attachment.Date = Convert.ToDateTime(value);
                                }
                                break;

                            case JsonToken.Date:
                                attachment.Date = (DateTime?)reader.Value;
                                break;
                            }
                            break;

                        case "_content_type":
                        case "content_type":
                        case "contenttype":
                        case "contentType":
                            attachment.ContentType = reader.ReadAsString();
                            break;

                        case "_content_length":
                        case "content_length":
                        case "contentlength":
                        case "contentLength":
                            reader.Read();
                            switch (reader.TokenType)
                            {
                            case JsonToken.String:
                                var value = (string)reader.Value;
                                if (!string.IsNullOrEmpty(value))
                                {
                                    attachment.ContentLength = Convert.ToInt64(value);
                                }
                                break;

                            case JsonToken.Integer:
                            case JsonToken.Float:
                                attachment.ContentLength = (long?)reader.Value;
                                break;
                            }
                            break;

                        case "_language":
                        case "language":
                            attachment.Language = reader.ReadAsString();
                            break;

                        case "_detect_language":
                            attachment.DetectLanguage = reader.ReadAsBoolean();
                            break;

                        case "_indexed_chars":
                        case "indexed_chars":
                            reader.Read();
                            switch (reader.TokenType)
                            {
                            case JsonToken.String:
                                var value = (string)reader.Value;
                                if (!string.IsNullOrEmpty(value))
                                {
                                    attachment.IndexedCharacters = Convert.ToInt64(value);
                                }
                                break;

                            case JsonToken.Integer:
                            case JsonToken.Float:
                                attachment.IndexedCharacters = (long?)reader.Value;
                                break;
                            }
                            break;

                        case "title":
                            attachment.Title = reader.ReadAsString();
                            break;
                        }
                    }
                    if (reader.TokenType == JsonToken.EndObject)
                    {
                        break;
                    }
                }
                return(attachment);
            }
            return(null);
        }