/// <summary> /// Converts an object to a <see cref="JsonValue"/>. /// </summary> /// <param name="serializer">The <see cref="JsonSerializer"/> instance to use for additional /// serialization of values.</param> /// <returns>The <see cref="JsonValue"/> representation of the object.</returns> public JsonValue ToJson(JsonSerializer serializer) { var obj = new JsonObject(); obj["valid"] = IsValid; if (RelativeLocation != null) { var relativeLocation = RelativeLocation.ToString(); obj["keywordLocation"] = relativeLocation; if (AbsoluteLocation != null && (AbsoluteLocation.Fragment != relativeLocation || RelativeLocation.Contains("$ref") || RelativeLocation.Contains("$recursiveRef"))) { obj["absoluteKeywordLocation"] = AbsoluteLocation.OriginalString; } } if (InstanceLocation != null) { obj["instanceLocation"] = InstanceLocation.ToString(); } var nonNullNestedResults = NestedResults.Where(r => !ReferenceEquals(r, Null)).ToList(); if (Keyword != null) { obj["keyword"] = Keyword; } if (IsValid) { if (AnnotationValue != null) { obj["annotation"] = AnnotationValue; } if (nonNullNestedResults.Any()) { obj["annotations"] = nonNullNestedResults.Select(r => r.ToJson(serializer)).ToJson(); } } else { if (!string.IsNullOrWhiteSpace(ErrorMessage)) { obj["error"] = ErrorMessage; } if (nonNullNestedResults.Any()) { obj["errors"] = nonNullNestedResults.Select(r => r.ToJson(serializer)).ToJson(); } } if (IncludeAdditionalInfo && AdditionalInfo != null && AdditionalInfo.Any()) { obj["additionalInfo"] = AdditionalInfo; } return(obj); }