public void Serialize(
            StreamWriter streamWriter,
            SerializationContext serializationContext,
            object value,
            PropertyMetaData propertyMetaData = null)
        {
            if (value == null)
            {
                return;
            }

            var mes = (VendingMachineFullUpdateMessage)value;
            streamWriter.WriteInt32((int)mes.N3MessageType);
            streamWriter.WriteIdentity(mes.Identity);
            streamWriter.WriteByte(mes.Unknown);

            streamWriter.WriteInt32(mes.TypeIdentifier);
            streamWriter.WriteIdentity(mes.NpcIdentity);
            if (mes.NpcIdentity.Instance == 0)
            {
                streamWriter.WriteSingle(mes.Coordinates.X);
                streamWriter.WriteSingle(mes.Coordinates.Y);
                streamWriter.WriteSingle(mes.Coordinates.Z);
                streamWriter.WriteSingle(mes.Heading.X);
                streamWriter.WriteSingle(mes.Heading.Y);
                streamWriter.WriteSingle(mes.Heading.Z);
                streamWriter.WriteSingle(mes.Heading.W);
            }
            streamWriter.WriteInt32(mes.PlayfieldId);
            streamWriter.WriteInt32(mes.Unknown4);
            streamWriter.WriteInt32(mes.Unknown5);
            streamWriter.WriteInt16(mes.Unknown6);

            if (mes.Stats == null)
            {
                streamWriter.WriteInt32(0x3f1);
            }
            else
            {
                int len = mes.Stats.Length;
                len = (len + 1) * 0x3f1;
                streamWriter.WriteInt32(len);

                foreach (GameTuple<CharacterStat, uint> v in mes.Stats)
                {
                    streamWriter.WriteInt32((int)v.Value1);
                    streamWriter.WriteUInt32(v.Value2);
                }
            }

            if (mes.Unknown7 == null)
            {
                streamWriter.WriteInt32(0);
            }
            else
            {
                streamWriter.WriteInt32(mes.Unknown7.Length);
                streamWriter.WriteString(mes.Unknown7);
            }

            streamWriter.WriteInt32(mes.Unknown8);
            streamWriter.WriteInt32(mes.Unknown9);
            streamWriter.WriteInt32((mes.Unknown10.Length + 1) * 0x3f1);
            foreach (Identity id in mes.Unknown10)
            {
                streamWriter.WriteIdentity(id);
            }

            streamWriter.WriteInt32(mes.Unknown11);
        }
        public void Serialize(
            StreamWriter streamWriter,
            SerializationContext serializationContext,
            object value,
            PropertyMetaData propertyMetaData = null)
        {
            if (value == null)
            {
                return;
            }

            var mes = (VendingMachineFullUpdateMessage)value;

            streamWriter.WriteInt32((int)mes.N3MessageType);
            streamWriter.WriteIdentity(mes.Identity);
            streamWriter.WriteByte(mes.Unknown);

            streamWriter.WriteInt32(mes.TypeIdentifier);
            streamWriter.WriteIdentity(mes.NpcIdentity);
            if (mes.NpcIdentity.Instance == 0)
            {
                streamWriter.WriteSingle(mes.Coordinates.X);
                streamWriter.WriteSingle(mes.Coordinates.Y);
                streamWriter.WriteSingle(mes.Coordinates.Z);
                streamWriter.WriteSingle(mes.Heading.X);
                streamWriter.WriteSingle(mes.Heading.Y);
                streamWriter.WriteSingle(mes.Heading.Z);
                streamWriter.WriteSingle(mes.Heading.W);
            }
            streamWriter.WriteInt32(mes.PlayfieldId);
            streamWriter.WriteInt32(mes.Unknown4);
            streamWriter.WriteInt32(mes.Unknown5);
            streamWriter.WriteInt16(mes.Unknown6);

            if (mes.Stats == null)
            {
                streamWriter.WriteInt32(0x3f1);
            }
            else
            {
                int len = mes.Stats.Length;
                len = (len + 1) * 0x3f1;
                streamWriter.WriteInt32(len);

                foreach (GameTuple <CharacterStat, uint> v in mes.Stats)
                {
                    streamWriter.WriteInt32((int)v.Value1);
                    streamWriter.WriteUInt32(v.Value2);
                }
            }

            if (mes.Unknown7 == null)
            {
                streamWriter.WriteInt32(0);
            }
            else
            {
                streamWriter.WriteInt32(mes.Unknown7.Length);
                streamWriter.WriteString(mes.Unknown7);
            }

            streamWriter.WriteInt32(mes.Unknown8);
            streamWriter.WriteInt32(mes.Unknown9);
            streamWriter.WriteInt32((mes.Unknown10.Length + 1) * 0x3f1);
            foreach (Identity id in mes.Unknown10)
            {
                streamWriter.WriteIdentity(id);
            }

            streamWriter.WriteInt32(mes.Unknown11);
        }