我在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中的数据,但是类似于:thisChannel.Name不起作用。我不知道如何继续使用这个对象。
答案 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
属性。你需要:
使用您添加的通用方法:
var thisChannel = XmlDeserializeFromString<Channel>(XMLString);`
dynamic
在运行时解析方法名称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