コード例 #1
0
        public static string SerializeTriple(XunitSerializationTriple triple)
        {
            var serializedType  = SerializationHelper.GetTypeNameForSerialization(triple.Type);
            var serializedValue = Serialize(triple.Value);

            // Leaving off the colon is how we indicate null-ness
            if (serializedValue == null)
            {
                return($"{triple.Key}:{serializedType}");
            }

            return($"{triple.Key}:{serializedType}:{serializedValue}");
        }
コード例 #2
0
            public void Serialize(IXunitSerializationInfo info)
            {
                info.AddValue("ElementType", SerializationHelper.GetTypeNameForSerialization(elementType));
                info.AddValue("Rank", array.Rank);
                info.AddValue("TotalLength", array.Length);

                for (int dimension = 0; dimension < array.Rank; dimension++)
                {
                    info.AddValue("Length" + dimension, array.GetLength(dimension));
                }
                for (int dimension = 0; dimension < array.Rank; dimension++)
                {
                    info.AddValue("LowerBound" + dimension, array.GetLowerBound(dimension));
                }

                int i = 0;

                foreach (object obj in array)
                {
                    info.AddValue("Item" + i, obj);
                    i++;
                }
            }
コード例 #3
0
        public static string Serialize(object value)
        {
            if (value == null)
            {
                return(null);
            }

            var serializable = value as IXunitSerializable;

            if (serializable != null)
            {
                var info = new XunitSerializationInfo();
                serializable.Serialize(info);
                return(info.ToSerializedString());
            }

            var charData = value as char?;

            if (charData != null)
            {
                return(((ushort)charData.GetValueOrDefault()).ToString(CultureInfo.InvariantCulture));
            }

            var stringData = value as string;

            if (stringData != null)
            {
                return(ToBase64(stringData));
            }

            var byteData = value as byte?;

            if (byteData != null)
            {
                return(byteData.GetValueOrDefault().ToString(CultureInfo.InvariantCulture));
            }

            var sbyteData = value as sbyte?;

            if (sbyteData != null)
            {
                return(sbyteData.GetValueOrDefault().ToString(CultureInfo.InvariantCulture));
            }

            var ushortData = value as ushort?;

            if (ushortData != null)
            {
                return(ushortData.GetValueOrDefault().ToString(CultureInfo.InvariantCulture));
            }

            var shortData = value as short?;

            if (shortData != null)
            {
                return(shortData.GetValueOrDefault().ToString(CultureInfo.InvariantCulture));
            }

            var uintData = value as uint?;

            if (uintData != null)
            {
                return(uintData.GetValueOrDefault().ToString(CultureInfo.InvariantCulture));
            }

            var intData = value as int?;

            if (intData != null)
            {
                return(intData.GetValueOrDefault().ToString(CultureInfo.InvariantCulture));
            }

            var ulongData = value as ulong?;

            if (ulongData != null)
            {
                return(ulongData.GetValueOrDefault().ToString(CultureInfo.InvariantCulture));
            }

            var longData = value as long?;

            if (longData != null)
            {
                return(longData.GetValueOrDefault().ToString(CultureInfo.InvariantCulture));
            }

            var floatData = value as float?;

            if (floatData != null)
            {
                var info     = new XunitSerializationInfo();
                var arraySer = new ArraySerializer(BitConverter.GetBytes(floatData.GetValueOrDefault()));
                arraySer.Serialize(info);
                return(info.ToSerializedString());
            }

            var doubleData = value as double?;

            if (doubleData != null)
            {
                var info     = new XunitSerializationInfo();
                var arraySer = new ArraySerializer(BitConverter.GetBytes(doubleData.GetValueOrDefault()));
                arraySer.Serialize(info);
                return(info.ToSerializedString());
            }

            var decimalData = value as decimal?;

            if (decimalData != null)
            {
                return(decimalData.GetValueOrDefault().ToString(CultureInfo.InvariantCulture));
            }

            var booleanData = value as bool?;

            if (booleanData != null)
            {
                return(booleanData.GetValueOrDefault().ToString());
            }

            var datetimeData = value as DateTime?;

            if (datetimeData != null)
            {
                return(datetimeData.GetValueOrDefault().ToString("o", CultureInfo.InvariantCulture));  // Round-trippable format
            }
            var datetimeoffsetData = value as DateTimeOffset?;

            if (datetimeoffsetData != null)
            {
                return(datetimeoffsetData.GetValueOrDefault().ToString("o", CultureInfo.InvariantCulture));  // Round-trippable format
            }
            var typeData = value as Type;

            if (typeData != null)
            {
                return(SerializationHelper.GetTypeNameForSerialization(typeData));
            }

            var valueType = value.GetType();

            if (valueType.IsEnum())
            {
                if (!valueType.IsFromLocalAssembly())
                {
                    throw new ArgumentException($"We cannot serialize enum {valueType.FullName}.{value} because it lives in the GAC", nameof(value));
                }
                return(value.ToString());
            }

            var arrayData = value as Array;

            if (arrayData != null)
            {
                var info     = new XunitSerializationInfo();
                var arraySer = new ArraySerializer(arrayData);
                arraySer.Serialize(info);
                return(info.ToSerializedString());
            }

            throw new ArgumentException($"We don't know how to serialize type {valueType.FullName}", nameof(value));
        }