Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用反序列化对象?_C#_Serialization_Windows 8 - Fatal编程技术网

C# 如何使用反序列化对象?

C# 如何使用反序列化对象?,c#,serialization,windows-8,C#,Serialization,Windows 8,我正在用C#for Windows 8应用程序序列化和反序列化一个对象 在将对象传递到下一个视图之前,我正在序列化对象,因为传递对象会抛出异常 功能已导航到: protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); string XMLString = e.Parameter.ToString(); var thisChannel = XmlDeserialize

我正在用C#for Windows 8应用程序序列化和反序列化一个对象

在将对象传递到下一个视图之前,我正在序列化对象,因为传递对象会抛出异常

功能已导航到:

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;
    }
公共静态通道XmlDeserializeFromString(string objectData)
{
返回(通道)XmlDeserializeFromString(objectData,typeof(通道));
}
公共静态对象XmlDeserializeFromString(string objectData,类型)
{
var serializer=新的XmlSerializer(类型);
客观结果;
使用(TextReader=new StringReader(objectData))
{
结果=序列化程序。反序列化(读取器);
}
返回结果;
}


我想访问此对象中的数据,但类似于:thisChannel.Name的内容无效。我不知道如何继续使用此对象。

XmlDeserializeFromString
返回一个
对象,该对象没有
名称
属性。您需要:

  • 将其强制转换为要用作的类型
  • 使用您添加的通用方法,该方法可以:

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

  • 首先在此行中删除
    var

     //var thisChannel = XmlDeserializeFromString(XMLString, typeof(Channel));
     Channel thisChannel = XmlDeserializeFromString(XMLString, typeof(Channel));
    
    然后,当选择了错误的
    对象XmlDeserializeFromString()
    时,至少会出现一个错误

    为了确保您使用的是正确的:

     Channel thisChannel = XmlDeserializeFromString<Channel>(XMLString);
    
    Channel thisChannel=XmlDeserializeFromString(XMLString);
    

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

    Yes JSON>XML,尽管您希望坚持使用XML,但它提供了序列化和反序列化XML以及JSON到/来自stream&string

    .

    不要这样做

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

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


    参见

    var thiscannel=(Channel)XmlDeserializeFromString(XMLString,typeof(Channel));大概或者使用其他可用的方法var thisChannel=XmlDeserializeFromString(XMLString);多亏了这个答案和@Ric对我问题的评论,我才得以解决这个问题。解决方案是这样做的:Channel thisChannel=(Channel)XmlDeserializeFromString(XMLString,typeof(Channel));现在我注意到:Channel thisChannel=XmlDeserializeFromString(XMLString);也行;)谢谢:)嘿,乔恩,这就是为什么我要先序列化我的对象。即使我仍然有位图的问题,我还是在位图图像的定义之前加入了[XmlIgnore],你还是应该看看视频。