/// <summary> /// Writes the json object value to the <paramref name="jsonWriter"/>. /// </summary> /// <param name="jsonWriter">The <see cref="JsonWriter"/> to write to.</param> /// <param name="jsonObjectValue">Writes the given json object value to the underlying json writer.</param> /// <param name="typeName">Type name of the json object to write. If type name is null, no type name is written.</param> /// <param name="odataVersion">The OData protocol version to be used for writing payloads.</param> internal static void WriteJsonObjectValue(this JsonWriter jsonWriter, IDictionary <string, object> jsonObjectValue, string typeName, ODataVersion odataVersion) { DebugUtils.CheckNoExternalCallers(); Debug.Assert(jsonWriter != null, "jsonWriter != null"); Debug.Assert(jsonObjectValue != null, "jsonObjectValue != null"); jsonWriter.StartObjectScope(); if (typeName != null) { Debug.Assert(!jsonObjectValue.ContainsKey(JsonConstants.ODataMetadataName), "__metadata should not be present in jsonObjectValue"); jsonWriter.WriteName(JsonConstants.ODataMetadataName); jsonWriter.StartObjectScope(); jsonWriter.WriteName(JsonConstants.ODataMetadataTypeName); jsonWriter.WriteValue(typeName); jsonWriter.EndObjectScope(); } foreach (KeyValuePair <string, object> property in jsonObjectValue) { jsonWriter.WriteName(property.Key); jsonWriter.WriteJsonValue(property.Value, odataVersion); } jsonWriter.EndObjectScope(); }
/// <summary> /// Write an inner error property and message. /// </summary> /// <param name="jsonWriter">The JSON writer to write the error to.</param> /// <param name="innerError">Inner error details.</param> /// <param name="innerErrorPropertyName">The property name for the inner error property.</param> /// <param name="recursionDepth">The number of times this method has been called recursively.</param> /// <param name="maxInnerErrorDepth">The maximumum number of nested inner errors to allow.</param> private static void WriteInnerError(JsonWriter jsonWriter, ODataInnerError innerError, string innerErrorPropertyName, int recursionDepth, int maxInnerErrorDepth) { Debug.Assert(jsonWriter != null, "jsonWriter != null"); Debug.Assert(innerErrorPropertyName != null, "innerErrorPropertyName != null"); ValidationUtils.IncreaseAndValidateRecursionDepth(ref recursionDepth, maxInnerErrorDepth); // "innererror": { jsonWriter.WriteName(innerErrorPropertyName); jsonWriter.StartObjectScope(); //// NOTE: we add empty elements if no information is provided for the message, error type and stack trace //// to stay compatible with Astoria. // "message": "<message>" jsonWriter.WriteName(JsonConstants.ODataErrorInnerErrorMessageName); jsonWriter.WriteValue(innerError.Message ?? string.Empty); // "type": "<typename"> jsonWriter.WriteName(JsonConstants.ODataErrorInnerErrorTypeNameName); jsonWriter.WriteValue(innerError.TypeName ?? string.Empty); // "stacktrace": "<stacktrace>" jsonWriter.WriteName(JsonConstants.ODataErrorInnerErrorStackTraceName); jsonWriter.WriteValue(innerError.StackTrace ?? string.Empty); if (innerError.InnerError != null) { // "internalexception": { <nested inner error> } ODataJsonWriterUtils.WriteInnerError(jsonWriter, innerError.InnerError, JsonConstants.ODataErrorInnerErrorInnerErrorName, recursionDepth, maxInnerErrorDepth); } // } jsonWriter.EndObjectScope(); }
internal static void WriteJsonObjectValue(this JsonWriter jsonWriter, IDictionary <string, object> jsonObjectValue, string typeName, ODataVersion odataVersion) { jsonWriter.StartObjectScope(); if (typeName != null) { jsonWriter.WriteName("__metadata"); jsonWriter.StartObjectScope(); jsonWriter.WriteName("type"); jsonWriter.WriteValue(typeName); jsonWriter.EndObjectScope(); } foreach (KeyValuePair <string, object> pair in jsonObjectValue) { jsonWriter.WriteName(pair.Key); jsonWriter.WriteJsonValue(pair.Value, odataVersion); } jsonWriter.EndObjectScope(); }
private static void WriteError(JsonWriter jsonWriter, string code, string message, string messageLanguage, ODataInnerError innerError, int maxInnerErrorDepth) { jsonWriter.StartObjectScope(); jsonWriter.WriteName("error"); jsonWriter.StartObjectScope(); jsonWriter.WriteName("code"); jsonWriter.WriteValue(code); jsonWriter.WriteName("message"); jsonWriter.StartObjectScope(); jsonWriter.WriteName("lang"); jsonWriter.WriteValue(messageLanguage); jsonWriter.WriteName("value"); jsonWriter.WriteValue(message); jsonWriter.EndObjectScope(); if (innerError != null) { WriteInnerError(jsonWriter, innerError, "innererror", 0, maxInnerErrorDepth); } jsonWriter.EndObjectScope(); jsonWriter.EndObjectScope(); }
/// <summary> /// Write an error message. /// </summary> /// <param name="jsonWriter">The JSON writer to write the error to.</param> /// <param name="code">The code of the error.</param> /// <param name="message">The message of the error.</param> /// <param name="messageLanguage">The language of the message.</param> /// <param name="innerError">Inner error details that will be included in debug mode (if present).</param> /// <param name="maxInnerErrorDepth">The maximumum number of nested inner errors to allow.</param> private static void WriteError(JsonWriter jsonWriter, string code, string message, string messageLanguage, ODataInnerError innerError, int maxInnerErrorDepth) { Debug.Assert(jsonWriter != null, "jsonWriter != null"); Debug.Assert(code != null, "code != null"); Debug.Assert(message != null, "message != null"); Debug.Assert(messageLanguage != null, "messageLanguage != null"); // { "error": { jsonWriter.StartObjectScope(); jsonWriter.WriteName(JsonConstants.ODataErrorName); jsonWriter.StartObjectScope(); // "code": "<code>" jsonWriter.WriteName(JsonConstants.ODataErrorCodeName); jsonWriter.WriteValue(code); // "message": { jsonWriter.WriteName(JsonConstants.ODataErrorMessageName); jsonWriter.StartObjectScope(); // "lang": "<messageLanguage>" jsonWriter.WriteName(JsonConstants.ODataErrorMessageLanguageName); jsonWriter.WriteValue(messageLanguage); // "value": "<message>" jsonWriter.WriteName(JsonConstants.ODataErrorMessageValueName); jsonWriter.WriteValue(message); // } jsonWriter.EndObjectScope(); if (innerError != null) { ODataJsonWriterUtils.WriteInnerError(jsonWriter, innerError, JsonConstants.ODataErrorInnerErrorName, /* recursionDepth */ 0, maxInnerErrorDepth); } // } } jsonWriter.EndObjectScope(); jsonWriter.EndObjectScope(); }
private static void WriteInnerError(JsonWriter jsonWriter, ODataInnerError innerError, string innerErrorPropertyName, int recursionDepth, int maxInnerErrorDepth) { ValidationUtils.IncreaseAndValidateRecursionDepth(ref recursionDepth, maxInnerErrorDepth); jsonWriter.WriteName(innerErrorPropertyName); jsonWriter.StartObjectScope(); jsonWriter.WriteName("message"); jsonWriter.WriteValue(innerError.Message ?? string.Empty); jsonWriter.WriteName("type"); jsonWriter.WriteValue(innerError.TypeName ?? string.Empty); jsonWriter.WriteName("stacktrace"); jsonWriter.WriteValue(innerError.StackTrace ?? string.Empty); if (innerError.InnerError != null) { WriteInnerError(jsonWriter, innerError.InnerError, "internalexception", recursionDepth, maxInnerErrorDepth); } jsonWriter.EndObjectScope(); }