如何获取AllJoyn byte []属性

时间:2016-02-25 19:17:11

标签: c# windows-10-universal alljoyn

我有像这样的AllJoyn属性

<property name="DeviceAddresses" type="ay" access="read">

当我尝试阅读它时,我是一个Windows 10 UWP应用程序 - 我获得了成功 - 但我不知道如何从结果中获取值 代码如下所示:

var vProperty = pInterface.GetProperty(propertyName);

if (vProperty == null) return null;
var result = await vProperty.ReadValueAsync();

if (result.Status.IsSuccess) 
{
    if (vProperty.TypeInfo.Type == TypeId.Uint8Array) 
    {
        byte[] Erg = result.Value ???
    }
}

属性值通过

创建
object o = Windows.Foundation.PropertyValue.CreateUInt8Array(value);

但我发现没有办法(施放等)获取字节数。

1 个答案:

答案 0 :(得分:1)

我使用DeviceProviders访问AllJoyn方法。它使用

IAsyncOperation<InvokeMethodResult> InvokeAsync(IList<object> @params);

获取服务器响应。它看起来类似于您的ReadValueAsync()返回的内容。但是不完全一样。这就是我访问字节的方式。

InvokeMethodResult result = await MyAllJoynMethod.InvokeAsync(new List<object> { "parameter", 2 });
if (result.Status.IsSuccess)
{
    var resultList = result.Values as IList<object>;
    foreach (var resultListItem in resultList)
    {
        var pairs = resultListItem as IList<KeyValuePair<object, object>>;
        foreach (var pair in pairs)
        {
            var key = pair.Key as string; //<- type string taken from MyAllJoynMethod definition
            var variant = pair.Value as AllJoynMessageArgVariant;//<- type AllJoynMessageArgVariant taken from MyAllJoynMethod definition (variant)

            if (variant.TypeDefinition.Type == TypeId.Uint8Array)
            {
                var array8 = j as IList<object>;
                foreach (byte b in array8)
                {
                    // do something with b
                }
            }
        }
    }
}

编辑:如果您不想自己编程,可以使用OpenAlljoynExplorer。尚不确定实际是否支持字节数组。