private YamlNode CreateBinaryArrayNode(Array array)
{
var type = array.GetType();
var element = type.GetElementType();
if ( !TypeUtils.IsPureValueType(element) )
throw new InvalidOperationException(
"Can not serialize {0} as binary because it contains non-value-type(s).".DoFormat(type.FullName));
var elementSize = Marshal.SizeOf(element);
var binary = new byte[array.LongLength * elementSize];
int j = 0;
for ( int i = 0; i < array.Length; i++ ) {
IntPtr p = Marshal.UnsafeAddrOfPinnedArrayElement(array, i);
Marshal.Copy(p, binary, j, elementSize);
j += elementSize;
}
var dimension = "";
if ( array.Rank > 1 ) {
for ( int i = 0; i < array.Rank; i++ ) {
if ( dimension != "" )
dimension += ", ";
dimension += array.GetLength(i);
}
dimension = "[" + dimension + "]\r\n";
}
var result= str(TypeNameToYamlTag(type), dimension + Base64Encode(type, binary));
result.Properties["Don'tCareLineBreaks"] = "true";
return result;
}