【问题标题】:How to save a list of coordinates to isolated storage?如何将坐标列表保存到独立存储?
【发布时间】:2014-03-21 15:55:12
【问题描述】:

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

我尝试使用在此处找到的帮助程序类 problem Storing a list of Objects in Isolated Storage 保存列表,但我认为我的语法在保存它时可能是错误的,因为我是使用列表的新手。这就是我尝试保存列表的方式。任何人都可以为我指出保存照明的正确方向吗?

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

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

mycoord 是在全局级别创建的坐标列表:

List&lt;GeoCoordinate&gt; mycoord = new List&lt;GeoCoordinate&gt;();

并在 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);
}

【问题讨论】:

  • 看起来你的 .SaveList 语法是问题所在。您将变量传递给通用模板,您的意思是.SaveList&lt;List&lt;GeoCoordinate&gt;&gt;

标签: c# windows-phone-8 isolatedstorage


【解决方案1】:

首先创建一个自定义序列化对象

[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 是免费的,如果您对它的工作原理感兴趣,它还包括文档和源代码。

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

【讨论】:

    【解决方案2】:

    首先创建坐标类:

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

    现在如果你想保存 List&lt;coord&gt; 你可以这样做:

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

    但如果您只想保存几个坐标,而不是列表IsolatedStorageSetting 会是更好的选择。

    【讨论】:

      猜你喜欢
      • 2013-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多