Beispiel #1
0
        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);
                }
        }
Beispiel #2
0
        /// <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));
        }