如何将坐标列表保存到隔离存储?

时间:2014-03-21 15:55:13

标签: c# windows-phone-8 isolatedstorage

我有一个GeoCoordinate列表,我想在应用程序关闭时保存到存储,但我不确定如何将其保存到存储。

我尝试使用problem Storing a list of Objects in Isolated Storage中的帮助程序类来保存列表,但我认为我的语法可能是错误的,因为我是使用list的新手。这就是我试图保存列表的方法。任何人都可以通过保存点亮指示我正确的方向吗?

mycoord = Isolated_Storage_Helper.IsoStoreHelper
                                 .SaveList<mycoord>("Storage_Folder/", "Storage");

它给出了一个错误,指出mycoord is a field but is used as a type

mycoord是在全球范围内创建的坐标列表:

List<GeoCoordinate> mycoord = new List<GeoCoordinate>();

并填入OnNavigatedTo方法:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if (NavigationContext.QueryString.ContainsKey("GeoLat") &&  
        NavigationContext.QueryString.ContainsKey("GeoLong") &&  
        NavigationContext.QueryString.ContainsKey("pName"))
    {
        if (mycoord.Count >= 2)
        {
            //do something,draw route between points
            return;
        }
        else
        {
            var latitude = Convert.ToDouble(NavigationContext.QueryString["GeoLat"]);
            var longtitude = Convert.ToDouble(NavigationContext.QueryString["GeoLong"]);
            var MyGeoPosition = new GeoCoordinate(latitude, longtitude);
            var pushPinName = NavigationContext.QueryString["pName"];
            DrawPushPin(MyGeoPosition, pushPinName);
            mycoord.Add(MyGeoPosition);
        }
    }
    base.OnNavigatedTo(e);
}

2 个答案:

答案 0 :(得分:1)

首先创建一个cusom可序列化对象

[DataContractAttribute]
public class GeoPostionObj{
   [DataMember]
   Double lat {get;set;}
   [DataMember]
   Double lon {get; set;}

   public GeoPositionObj(double lat, double lon){
     this.lat = lat;
     this.lon = lon;
   }
}

现在您可以初始化并保存此对象

//Where you want to save it
//We assume you already have your lat and lon retrieved 

GeoPositionObj saveObj = new GeoPositionObj(lat,lon);

EZ_Iso.IsolatedStorageAccess.SaveFile("GeoPos",saveObj);


//Then to retrieve 
GeoPositionObj retrievedObj = (GeoPositionObj)EZ_Iso.IsolatedStorageAccess.GetFile("GeoPos",typeof(GeoPositionObj));

您可以在此处找到EZ_Iso.dll http://anthonyrussell.info/postpage.php?name=2

DLL是免费的,如果您对它的工作方式感兴趣,可以包含文档和源代码。

如果您有任何问题,请告诉我

答案 1 :(得分:0)

首先创建坐标类:

[DataContract]
class coord{
    [DataMember]
    public double lat{get;set;}
    [DataMember]
    public double lon{get;set;}
}

现在,如果您要保存List<coord>,您可以这样做:

DataContractSerializer ser = new DataContractSerializer(typeof(List<coord>));
ser.WriteObject(any_file_stream, instance_of_List<coord>);

但是如果你只想保存几个坐标,那么列表IsolatedStorageSetting不是更好的选择。