如何使用反序列化的对象?

时间:2013-08-26 13:04:36

标签: c# serialization windows-8

我在C#for Windows 8 Apps中序列化和反序列化对象。

我在将其传递给下一个View之前序列化我的Object,因为传递一个对象会抛出异常。

function 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;
    }

Object Content

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

4 个答案:

答案 0 :(得分:2)

首先将var放入此行:

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

然后,如果选择了错误的object XmlDeserializeFromString(),您至少会收到错误。

确保你使用正确的:

 Channel thisChannel = XmlDeserializeFromString<Channel>(XMLString);

应小心使用重载,并且通常不与类型参数混合使用。

答案 1 :(得分:1)

XmlDeserializeFromString返回object,其中没有Name属性。你需要:

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

    var thisChannel = XmlDeserializeFromString<Channel>(XMLString);`
    
  4. 使用dynamic在运行时解析方法名称
  5. 使用反射在运行时查找Name属性

答案 2 :(得分:0)

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

答案 3 :(得分:0)

不要这样做。

通过导航参数传递非基本类型将导致应用程序从挂起恢复时崩溃。

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

请参阅SuspensionManager Error when application has more than 1 page in windows 8 XAML/C# app