【发布时间】:2016-04-23 09:17:14
【问题描述】:
我正在使用 Prism 6 开发 UWP 应用程序,当我在调试模式下关闭它时,出现错误 Type 'Windows.Devices.Geolocation.Geopoint' cannot be serialized.
在 OnSuspend 时发生。
在其他类发生此错误之前,但已阅读类必须具有无参数构造函数才能成功序列化。这有所帮助,但现在 Geopoint 出现错误。
Geopoint 类的默认构造函数在哪里以及如何使用?
错误:
"Type 'Windows.Devices.Geolocation.Geopoint' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute. Alternatively, you can ensure that the type is public and has a parameterless constructor - all public members of the type will then be serialized, and no attributes will be required."
堆栈跟踪:
System.Runtime.Serialization.DataContract.DataContractCriticalHelper.ThrowInvalidDataContractException(String message, Type type)\r\n at System.Runtime.Serialization.DataContract.DataContractCriticalHelper.CreateDataContract(Int32 id, RuntimeTypeHandle typeHandle, Type type)\r\n at System.Runtime.Serialization.DataContract.DataContractCriticalHelper.GetDataContractSkipValidation(Int32 id, RuntimeTypeHandle typeHandle, Type type)\r\n at System.Runtime.Serialization.XmlObjectSerializerContext.GetDataContract(RuntimeTypeHandle typeHandle, Type type)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiType(XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle objectTypeHandle, Type objectType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle, Type declaredType)\r\n at System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)\r\n at WriteKeyValueOfstringanyTypeToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , ClassDataContract )\r\n at System.Runtime.Serialization.ClassDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)\r\n at WriteArrayOfKeyValueOfstringanyTypeToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , CollectionDataContract )\r\n at System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)\r\n
更新: 我不存在的东西明确地不序列化Geopoint。
我只用
private Geopoint _mapCenter;
private Geopoint _myLocation;
[RestorableState]
public Geopoint MyLocation
{
get { return _myLocation; }
set { SetProperty(ref _myLocation, value); }
}
[RestorableState]
public Geopoint MapCenter
{
get { return _mapCenter; }
set { SetProperty(ref _mapCenter, value); }
}
Geolocator locator = new Geolocator();
private async void GetMyLocation()
{
try
{
var location = await locator.GetGeopositionAsync(TimeSpan.FromMinutes(20), TimeSpan.FromSeconds(30));
MyLocation = location.Coordinate.Point;
}
catch (Exception)
{
MyLocation = GlobalConst.DefaultGeoPoint;
LoadingBlockProgressIndicatorValue += 20;
}
MapCenter = MyLocation;
LoadingBlockProgressIndicatorValue += 20;
}
【问题讨论】:
-
不,你没有明确序列化
Geopoint。但是您认为RestorableState会做什么?
标签: c# prism uwp windows-10-mobile