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}"); }
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++; } }
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)); }