gpt4 book ai didi

c# - 如何制作可以添加到 Windows.Foundation.Collections.ValueSet 的类

转载 作者:行者123 更新时间:2023-11-30 23:08:39 26 4
gpt4 key购买 nike

我正在制作一个使用 AppServiceConnection 的 UWP 应用程序将数据发送到 COM 样式的应用程序。 AppServiceConnection.SendMessageAsync()采用 Windows.Foundation.Collections.ValueSet 类型

ValueSet类是一个集合,类似于一个字典,里面存放着<string, object>类型的KeyValuePairs。

我在向 ValueSet 添加数据时遇到问题,每次尝试添加对象时都会收到错误消息:“不支持此类型的数据。(HRESULT 异常:0x8007065E)”

对该错误的研究表明,要添加的对象必须是可序列化类型,并且可以实现Windows.Foundation.Collections.IPropertySet。它本身就是一个似乎存储键值对的集合接口(interface)。

我想知道如何创建一个可以添加到 ValueSet 的类。我是否必须创建一个新的集合来实现 IPropertySet或者是否有某种方法可以使类本身可序列化并能够添加到 ValueSet 中?

如果我必须执行 IPropertySet谁能指出我如何执行此操作的体面文档?

最佳答案

WinRT 没有可序列化对象的概念;它只支持值类型,如整数、 bool 值、字符串、数组、日期时间等,以及这些东西的集合。查看 PropertyValue class 的静态 Create* 成员例如(尽管您不需要使用这些方法来创建您放入集合中的项目)。

如果您想序列化 WinRT 对象或您自己的 .NET 对象,您可以将其转换为 JSON 或 XML,然后将其放入 ValueSet

例如:

  public void TestValueSet()
{
var x = new ValueSet();

// Integers are OK
x.Add("a", 42);

// URIs are not OK - can't be serialized
try
{
x.Add("b", new Uri("http://bing.com"));
}
catch (Exception ex)
{
Debug.WriteLine("Can't serialize a URI - " + ex.Message);
}

// Custom classes are not OK
var myClass = new MyClass { X = 42, Y = "hello" };
try
{
x.Add("c", myClass);
}
catch (Exception ex)
{
Debug.WriteLine("Can't serialize custom class - " + ex.Message);
}

// Serialized classes are OK
x.Add("d", Serialize<MyClass>(myClass));

foreach (var kp in x)
{
Debug.WriteLine("{0} -> {1}", kp.Key, kp.Value);
}
}

string Serialize<T>(T value)
{
var dcs = new DataContractSerializer(typeof(T));
var stream = new MemoryStream();
dcs.WriteObject(stream, value);
stream.Position = 0;
var buffer = new byte[stream.Length];
stream.Read(buffer, 0, (int)stream.Length);
return Encoding.UTF8.GetString(buffer);
}
}

[DataContract]
public class MyClass
{
[DataMember]
public int X { get; set; }
[DataMember]
public string Y { get; set; }
}

关于c# - 如何制作可以添加到 Windows.Foundation.Collections.ValueSet 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46367985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com