public Variant GetRemoteValue(Variant localeValue, TypeInfo remoteType)
{
TypeInfo localType = localeValue.TypeInfo;
if (localType == null)
{
localType = TypeInfo.Construct(localeValue.Value);
}
if (localType.BuiltInType == remoteType.BuiltInType || remoteType.BuiltInType == BuiltInType.Variant)
{
return localeValue;
}
if (localType.BuiltInType == BuiltInType.ByteString && (remoteType.BuiltInType == BuiltInType.Byte && remoteType.ValueRank != ValueRanks.Scalar))
{
return localeValue;
}
Array localArray = localeValue.Value as Array;
if (localArray != null && !typeof(byte[]).IsInstanceOfType(localArray))
{
Array remoteArray = TypeInfo.CastArray(localArray, localType.BuiltInType, remoteType.BuiltInType, ConvertLocalToRemote);
return new Variant(remoteArray, remoteType);
}
object remoteValue = ConvertLocalToRemote(localeValue.Value, localType.BuiltInType, remoteType.BuiltInType);
return new Variant(remoteValue, remoteType);
}