in bindings/qpid/dotnet/src/TypeTranslator.cpp [167:269]
void TypeTranslator::ManagedToNativeObject(
System::Object ^ managedValue,
::qpid::types::Variant & qpidVariant)
{
System::Type ^ typeP = (*managedValue).GetType();
System::TypeCode typeCode = System::Type::GetTypeCode( typeP );
switch (typeCode)
{
case System::TypeCode::Boolean :
qpidVariant = System::Convert::ToBoolean(managedValue, System::Globalization::CultureInfo::InvariantCulture);
break;
case System::TypeCode::Byte :
qpidVariant = System::Convert::ToByte(managedValue, System::Globalization::CultureInfo::InvariantCulture);
break;
case System::TypeCode::UInt16 :
qpidVariant = System::Convert::ToUInt16(managedValue, System::Globalization::CultureInfo::InvariantCulture);
break;
case System::TypeCode::UInt32 :
qpidVariant = System::Convert::ToUInt32(managedValue, System::Globalization::CultureInfo::InvariantCulture);
break;
case System::TypeCode::UInt64 :
qpidVariant = System::Convert::ToUInt64(managedValue, System::Globalization::CultureInfo::InvariantCulture);
break;
case System::TypeCode::Char :
case System::TypeCode::SByte :
qpidVariant = System::Convert::ToSByte(managedValue, System::Globalization::CultureInfo::InvariantCulture);
break;
case System::TypeCode::Int16 :
qpidVariant = System::Convert::ToInt16(managedValue, System::Globalization::CultureInfo::InvariantCulture);
break;
case System::TypeCode::Int32 :
qpidVariant = System::Convert::ToInt32(managedValue, System::Globalization::CultureInfo::InvariantCulture);
break;
case System::TypeCode::Int64 :
qpidVariant = System::Convert::ToInt64(managedValue, System::Globalization::CultureInfo::InvariantCulture);
break;
case System::TypeCode::Single :
qpidVariant = System::Convert::ToSingle(managedValue, System::Globalization::CultureInfo::InvariantCulture);
break;
case System::TypeCode::Double :
qpidVariant = System::Convert::ToDouble(managedValue, System::Globalization::CultureInfo::InvariantCulture);
break;
case System::TypeCode::String :
{
std::string rString;
System::String ^ rpString;
rpString = System::Convert::ToString(managedValue, System::Globalization::CultureInfo::InvariantCulture);
rString = QpidMarshal::ToNative(rpString);
qpidVariant = rString;
qpidVariant.setEncoding(QpidMarshal::ToNative("utf8"));
}
break;
case System::TypeCode::Object :
{
//
// Derived classes
//
if ("System.Guid" == typeP->ToString())
{
cli::array<System::Byte> ^ guidBytes = ((System::Guid)managedValue).ToByteArray();
pin_ptr<unsigned char> pinnedBuf = &guidBytes[0];
::qpid::types::Uuid newUuid = ::qpid::types::Uuid(pinnedBuf);
qpidVariant = newUuid;
}
else if (QpidTypeCheck::ObjectIsMap(managedValue))
{
::qpid::types::Variant::Map newMap;
ManagedToNative((QpidMap ^)managedValue, newMap);
qpidVariant = newMap;
}
else if (QpidTypeCheck::ObjectIsList(managedValue))
{
::qpid::types::Variant::List newList;
ManagedToNative((QpidList ^)managedValue, newList);
qpidVariant = newList;
}
else
{
throw gcnew System::NotImplementedException();
}
}
break;
default:
throw gcnew System::NotImplementedException();
}
}