/// <summary> /// Returns the IMessage represented by the byte array /// </summary> /// <param name="pData"></param> public IMessage GetMessage(Type pType, byte[] pData) { try { var objFrame = new Frame(pData); if (objFrame.Format == MessageFormat.Bson) { using (var ms = new MemoryStream(objFrame.Data)) { using (var reader = new Newtonsoft.Json.Bson.BsonDataReader(ms)) { return(new JsonSerializer() .Deserialize( reader, pType ) as IMessage); } } } else { var str = Encoding.UTF8.GetString(objFrame.Data); return(JsonConvert.DeserializeObject( str, pType ) as IMessage); } } catch (Exception ex) { Log.Error($"Failed creating message from provided data: {ex.Message}"); } return(null); }
protected T DeserializeUsingNewtonsoftReader <T>(byte[] bson, bool mustBeNested = false) { using (var memoryStream = new MemoryStream(bson)) using (var newtonsoftReader = new Newtonsoft.Json.Bson.BsonDataReader(memoryStream)) { newtonsoftReader.DateTimeKindHandling = System.DateTimeKind.Utc; newtonsoftReader.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc; if (mustBeNested) { newtonsoftReader.Read(); // StartObject newtonsoftReader.Read(); // PropertyName } newtonsoftReader.Read(); // Json.NET serializers expect caller to have already called Read var newtonsoftSerializer = new Newtonsoft.Json.JsonSerializer(); var value = newtonsoftSerializer.Deserialize <T>(newtonsoftReader); if (mustBeNested) { newtonsoftReader.Read(); // EndObject } return(value); } }
protected T ReadJsonUsingNativeBsonReader <T>(Newtonsoft.Json.JsonConverter converter, byte[] bson, bool mustBeNested = false) { using (var stream = new MemoryStream(bson)) using (var reader = new Newtonsoft.Json.Bson.BsonDataReader(stream)) { return(ReadJson <T>(converter, reader, mustBeNested)); } }
public static JObject Read(FileStream stream) { using (var br = new Newtonsoft.Json.Bson.BsonDataReader(stream)) { var serializer = new Newtonsoft.Json.JsonSerializer(); return((JObject)serializer.Deserialize(br)); } }
public DeserializedObject Deserialize(byte[] buffer) { System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer); Newtonsoft.Json.Bson.BsonDataReader reader = new Newtonsoft.Json.Bson.BsonDataReader(ms); JObject jObject = new JsonSerializer().Deserialize <JObject>(reader); return(new NewtonsoftBsonObject(jObject)); }
public static IJsonReader GetBsonReader(Stream stream) { var reader = new BinaryReader(stream, Encoding.UTF8, true); var dataReader = new Newtonsoft.Json.Bson.BsonDataReader(reader, false, DateTimeKind.Utc); return(ComponentContext.Resolve <IJsonReader>( new TypedParameter(typeof(Newtonsoft.Json.JsonReader), dataReader) )); }
private T Deserialize <T>(byte[] buffer) { switch (Serializer) { case SerializerEnum.JSON: string ascii = Encoding.ASCII.GetString(buffer, 0, buffer.Length); return(JsonConvert.DeserializeObject <T>(ascii)); case SerializerEnum.BSON: System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer); Newtonsoft.Json.Bson.BsonDataReader reader = new Newtonsoft.Json.Bson.BsonDataReader(ms); return(new JsonSerializer().Deserialize <T>(reader)); default: throw new ArgumentException("Invalid Serializer"); } }
internal static TValue FromBson <TValue>(byte[] buffer) { TValue value; using (MemoryStream ms = new MemoryStream(buffer)) { using (var reader = new Newtonsoft.Json.Bson.BsonDataReader(ms)) { var serializer = new Newtonsoft.Json.JsonSerializer { Formatting = Newtonsoft.Json.Formatting.None, Culture = CultureInfo.InvariantCulture, TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto, TypeNameAssemblyFormatHandling = Newtonsoft.Json.TypeNameAssemblyFormatHandling.Simple, }; value = serializer.Deserialize <TValue>(reader); } } return(value); }
//为了简化通讯协议,TCP用bson,http用JSON //Newtonsoft.Json 和 Newtonsoft.Json.Bson static void Main(string[] args) { Newtonsoft.Json.Linq.JValue v = new Newtonsoft.Json.Linq.JValue(11.0); Newtonsoft.Json.Linq.JObject obj = new Newtonsoft.Json.Linq.JObject(); obj["abc"] = v; var stream = new System.IO.MemoryStream(); Newtonsoft.Json.Bson.BsonDataWriter w = new Newtonsoft.Json.Bson.BsonDataWriter(stream); obj.WriteTo(w); var bts = stream.ToArray(); Newtonsoft.Json.Bson.BsonDataReader r = new Newtonsoft.Json.Bson.BsonDataReader(new System.IO.MemoryStream(bts)); var token = Newtonsoft.Json.Linq.JToken.ReadFrom(r); Console.WriteLine("Hello World!"); var tree = Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.ParseText("class A{public int aaa(){return 3+4;}}"); var op = new CSharpCompilationOptions(Microsoft.CodeAnalysis.OutputKind.DynamicallyLinkedLibrary); var ref1 = MetadataReference.CreateFromFile("needlib" + System.IO.Path.DirectorySeparatorChar + "mscorlib.dll"); var comp = Microsoft.CodeAnalysis.CSharp.CSharpCompilation.Create("aaa.dll", new[] { tree }, new[] { ref1 }, op); var ms = new System.IO.MemoryStream(); var mspdb = new System.IO.MemoryStream(); var result = comp.Emit(ms, mspdb); Console.WriteLine("result=" + result.Success); Console.WriteLine("dll=" + ms.Length); Console.WriteLine("pdb=" + mspdb.Length); System.IO.File.WriteAllBytes("111.dll", ms.ToArray()); System.IO.File.WriteAllBytes("111.pdb", mspdb.ToArray()); foreach (var d in result.Diagnostics) { Console.WriteLine(d.Descriptor.Description.ToString()); Console.WriteLine(d.Descriptor.Title.ToString()); Console.WriteLine(d.Descriptor.Category); Console.WriteLine(d.Descriptor.MessageFormat.ToString()); } Console.WriteLine("rosyln ok."); }
private static string ToJson(BsonDocument bson) { using (var stream = new MemoryStream()) { using (var writer = new BsonBinaryWriter(stream)) { BsonSerializer.Serialize(writer, typeof(BsonDocument), bson); } stream.Seek(0, SeekOrigin.Begin); using (var reader = new Newtonsoft.Json.Bson.BsonDataReader(stream)) { var sb = new StringBuilder(); var sw = new StringWriter(sb); using (var jWriter = new JsonTextWriter(sw)) { jWriter.DateTimeZoneHandling = DateTimeZoneHandling.Utc; jWriter.WriteToken(reader); } return(sb.ToString()); } } }
/// <summary> /// Builds a tcp messages from a wrapped data array /// used by the tcp processing system to deserialize recieved data /// </summary> /// <param name="data">The wrapped memory array.</param> /// <returns>a new tcp message built from the array segment</returns> /// <exception cref="UnregisteredMessageException"> If the message type is not found this will throw UnregisteredMessageException</exception> public static TcpMessage FromArraySegment(ArraySegment <byte> data) { if (data.Array == null || data.Count < sizeof(int)) { throw new ArgumentException($"ArraySegment null or too short, length: {data.Count}", nameof(data)); } Message msg; #pragma warning disable 618 using (var reader = new BsonDataReader(new MemoryStream(data.Array))) #pragma warning restore 618 { reader.Read(); //object reader.Read(); //property name var messageType = MessageHierarchy.GetTypeByFullName((string)reader.Value); reader.Read(); //property value msg = (Message)JsonConvert.DeserializeObject((string)reader.Value, messageType, Settings.JsonSettings); } Log.Debug("Deserialized Message MsgId=" + msg.MsgId + " MsgType" + msg.GetType().Name); return(new TcpMessage(msg, data)); }
//为了简化通讯协议,TCP用bson,http用JSON //Newtonsoft.Json 和 Newtonsoft.Json.Bson static void Main(string[] args) { Newtonsoft.Json.Linq.JValue v = new Newtonsoft.Json.Linq.JValue(11.0); Newtonsoft.Json.Linq.JObject obj = new Newtonsoft.Json.Linq.JObject(); obj["abc"] = v; var stream = new System.IO.MemoryStream(); Newtonsoft.Json.Bson.BsonDataWriter w = new Newtonsoft.Json.Bson.BsonDataWriter(stream); obj.WriteTo(w); var bts = stream.ToArray(); Newtonsoft.Json.Bson.BsonDataReader r = new Newtonsoft.Json.Bson.BsonDataReader(new System.IO.MemoryStream(bts)); var token = Newtonsoft.Json.Linq.JToken.ReadFrom(r); Console.WriteLine("Hello World!"); var tree = Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.ParseText("class A{public int aaa(){return 3;}}"); var op = new CSharpCompilationOptions(Microsoft.CodeAnalysis.OutputKind.DynamicallyLinkedLibrary); var ref1 = MetadataReference.CreateFromFile("needlib\\mscorlib.dll"); var comp = Microsoft.CodeAnalysis.CSharp.CSharpCompilation.Create("aaa.dll", new[] { tree }, new[] { ref1 }, op); var result = comp.Emit("e:\\111.dll", pdbPath: "e:\\111.pdb"); }