When MessageWriter.Write(object) is called, a variant should be written (see also the comment above the method). If the object is an array, a variant containing the array should be written. A array which is not in a variant can be written using MessageWriter.Write(Type,object) or MessageWriter.WriteArray(T).
If the code somewhere calls MessageWriter.Write(object) when a plain array is needed, the caller should be fixed.
Currently, this change breaks returning an array as a variant, e.g. for the following service:
using System;
using DBus;
[Interface ("test.test")]
public interface TestInterface {
object GetVal ();
}
public class Test : TestInterface {
public object GetVal () { return new int[3] { 1, 2, 3 }; }
public static void Main () {
Bus bus = Bus.Session;
bus.RequestName ("test.test");
bus.Register (new ObjectPath ("/test/test"), new Test ());
while (true)
bus.Iterate ();
}
}
I think this change is broken:
When
MessageWriter.Write(object)
is called, a variant should be written (see also the comment above the method). If the object is an array, a variant containing the array should be written. A array which is not in a variant can be written usingMessageWriter.Write(Type,object)
orMessageWriter.WriteArray(T)
.If the code somewhere calls
MessageWriter.Write(object)
when a plain array is needed, the caller should be fixed.Currently, this change breaks returning an array as a variant, e.g. for the following service:
Calling
GetVal
will disconnect the service: