C# 如何使用反序列化对象?
我正在用C#for Windows 8应用程序序列化和反序列化一个对象 在将对象传递到下一个视图之前,我正在序列化对象,因为传递对象会抛出异常 功能已导航到: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
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],你还是应该看看视频。