2

我在 C# 中为 Windows 8 应用程序序列化和反序列化一个对象。

我在将对象传递给下一个视图之前对其进行序列化,因为传递对象会抛出异常。

函数 OnNavigatedTo:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
   base.OnNavigatedTo(e);
   string XMLString = e.Parameter.ToString();
   var thisChannel = XmlDeserializeFromString(XMLString, typeof(Channel));
 ....}

反序列化功能:

  public static Channel XmlDeserializeFromString<Channel>(string objectData)
    {
        return (Channel)XmlDeserializeFromString(objectData, typeof(Channel));
    }

    public static object XmlDeserializeFromString(string objectData, Type type)
    {
        var serializer = new XmlSerializer(type);
        object result;

        using (TextReader reader = new StringReader(objectData))
        {
            result = serializer.Deserialize(reader);
        }

        return result;
    }

对象内容

我想访问此对象中的数据,但类似:thisChannel.Name 不起作用。而且我不知道如何继续使用这个对象。

4

4 回答 4

2

var从这一行开始:

 //var thisChannel = XmlDeserializeFromString(XMLString, typeof(Channel));
 Channel thisChannel = XmlDeserializeFromString(XMLString, typeof(Channel));

然后你至少会在object XmlDeserializeFromString()选择错误时得到一个错误。

并确保您使用正确的:

 Channel thisChannel = XmlDeserializeFromString<Channel>(XMLString);

重载应谨慎使用,一般不要与 Type 参数混合使用。

于 2013-08-26T13:09:22.420 回答
1

XmlDeserializeFromString返回一个object,它没有Name属性。您需要:

  1. 将其转换为您想要使用的类型
  2. 使用您添加的通用方法:

    var thisChannel = XmlDeserializeFromString<Channel>(XMLString);`
    
  3. 用于dynamic在运行时解析方法名称
  4. 使用反射Name在运行时查找属性
于 2013-08-26T13:08:31.927 回答
0

不要这样做。

通过导航参数传递非原始类型将导致您的应用程序在从挂起恢复时崩溃。

仅在 Windows 8 应用程序中将原始类型作为导航参数传递。

当应用程序在 Windows 8 XAML/C# 应用程序中超过 1 页时,请参阅SuspensionManager 错误

于 2013-08-27T01:36:09.223 回答
0

是的 JSON > XML,虽然你想坚持使用 XML,但使用TCD.Serialization,它提供序列化和反序列化 XML 和 JSON 到/来自流和字符串。

.

于 2013-08-26T13:25:54.237 回答