internal static void ThrowInvalidOperationException_MessagePackType(byte code) { throw GetException(); InvalidOperationException GetException() { return(new InvalidOperationException("Invalid MessagePackType:" + MessagePackCode.ToFormatName(code))); } }
private static Exception ThrowInvalidCode(byte code) { throw new InvalidOperationException(string.Format("code is invalid. code: {0} format: {1}", code, MessagePackCode.ToFormatName(code))); }
internal static void ThrowInvalidOperationException_Code(byte code) { throw GetException(); InvalidOperationException GetException() { return(new InvalidOperationException($"code is invalid. code:{code} format:{MessagePackCode.ToFormatName(code)}")); } }
private static InvalidOperationException GetInvalidOperationException(byte code) { return(new InvalidOperationException($"code is invalid. code:{code} format:{MessagePackCode.ToFormatName(code)}")); }
private static void ToJsonCore(ref MessagePackReader reader, TextWriter writer) { var type = reader.NextMessagePackType; switch (type) { case MessagePackType.Integer: if (MessagePackCode.IsSignedInteger(reader.NextCode)) { writer.Write(reader.ReadInt64().ToString(CultureInfo.InvariantCulture)); } else { writer.Write(reader.ReadUInt64().ToString(CultureInfo.InvariantCulture)); } break; case MessagePackType.Boolean: writer.Write(reader.ReadBoolean() ? "true" : "false"); break; case MessagePackType.Float: if (reader.NextCode == MessagePackCode.Float32) { writer.Write(reader.ReadSingle().ToString(CultureInfo.InvariantCulture)); } else { writer.Write(reader.ReadDouble().ToString(CultureInfo.InvariantCulture)); } break; case MessagePackType.String: WriteJsonString(reader.ReadString(), writer); break; case MessagePackType.Binary: writer.Write("\"" + Convert.ToBase64String(reader.ReadBytes().ToArray()) + "\""); break; case MessagePackType.Array: { int length = reader.ReadArrayHeader(); writer.Write("["); for (int i = 0; i < length; i++) { ToJsonCore(ref reader, writer); if (i != length - 1) { writer.Write(","); } } writer.Write("]"); return; } case MessagePackType.Map: { int length = reader.ReadMapHeader(); writer.Write("{"); for (int i = 0; i < length; i++) { // write key { var keyType = reader.NextMessagePackType; if (keyType == MessagePackType.String || keyType == MessagePackType.Binary) { ToJsonCore(ref reader, writer); } else { writer.Write("\""); ToJsonCore(ref reader, writer); writer.Write("\""); } } writer.Write(":"); // write body { ToJsonCore(ref reader, writer); } if (i != length - 1) { writer.Write(","); } } writer.Write("}"); return; } case MessagePackType.Extension: var extHeader = reader.ReadExtensionFormatHeader(); if (extHeader.TypeCode == ReservedMessagePackExtensionTypeCode.DateTime) { var dt = reader.ReadDateTime(extHeader); writer.Write("\""); writer.Write(dt.ToString("o", CultureInfo.InvariantCulture)); writer.Write("\""); } #if !UNITY else if (extHeader.TypeCode == TypelessFormatter.ExtensionTypeCode) { // prepare type name token var privateBuilder = new StringBuilder(); var typeNameTokenBuilder = new StringBuilder(); var positionBeforeTypeNameRead = reader.Position; ToJsonCore(ref reader, new StringWriter(typeNameTokenBuilder)); int typeNameReadSize = (int)reader.Sequence.Slice(positionBeforeTypeNameRead, reader.Position).Length; if (extHeader.Length > typeNameReadSize) { // object map or array var typeInside = reader.NextMessagePackType; if (typeInside != MessagePackType.Array && typeInside != MessagePackType.Map) { privateBuilder.Append("{"); } ToJsonCore(ref reader, new StringWriter(privateBuilder)); // insert type name token to start of object map or array if (typeInside != MessagePackType.Array) { typeNameTokenBuilder.Insert(0, "\"$type\":"); } if (typeInside != MessagePackType.Array && typeInside != MessagePackType.Map) { privateBuilder.Append("}"); } if (privateBuilder.Length > 2) { typeNameTokenBuilder.Append(","); } privateBuilder.Insert(1, typeNameTokenBuilder.ToString()); writer.Write(privateBuilder.ToString()); } else { writer.Write("{\"$type\":\"" + typeNameTokenBuilder.ToString() + "}"); } } #endif else { var ext = reader.ReadExtensionFormat(); writer.Write("["); writer.Write(ext.TypeCode); writer.Write(","); writer.Write("\""); writer.Write(Convert.ToBase64String(ext.Data.ToArray())); writer.Write("\""); writer.Write("]"); } break; case MessagePackType.Nil: reader.Skip(); writer.Write("null"); break; default: throw new NotSupportedException($"code is invalid. code: {reader.NextCode} format: {MessagePackCode.ToFormatName(reader.NextCode)}"); } }