2017-05-23 63 views
0

如何在SQLite數據庫中存儲Xamarin.Forms.Point的數組?如何在SQLite中存儲Xamarin.Forms.Point數組?

我有以下方法:

async void OnSaveButtonClicked(object sender, EventArgs e) 
{ 
    var temp = padView.Points; 
    var tempArray = padView.Points.ToArray(); 

    var databaseItem = new DatabaseItem 
    { 
     Name = Name.Text, 
     Date = Date.Date.ToString(), 
     //PadViewPoints = 
    }; 
    //var databaseItem = (DatabaseItem)BindingContext; 
    await App.Database.SaveItemAsync(databaseItem); 
    await Navigation.PopAsync(); 
} 

由於存在對padView的簽名,通過上述方法步進的時候,我看到tempArrayXamarin.Forms.Point[76]值。

我想將這個點數組存儲在數據庫中,以便稍後加載項目時加載它。

+2

如果你只是需要存儲它,而不是dyamiically查詢它,那麼你可以將它序列化爲json並作爲文本存儲 – Jason

回答

1

正如傑森說,你可以把它保存爲一個字符串,那實際的實現將是:

var temp = padView.Points; 
var tempArray = padView.Points.ToArray(); 

var databaseItem = new DatabaseItem 
{ 
    Name = Name.Text, 
    Date = Date.Date.ToString(), 
    PadViewPointsString = JsonConvert.SerializeObject(tempArray) 
}; 

而在DatabaseItem類:

public class DatabaseItem 
{ 
    // All other properties 

    string padViewPointsString; 
    public string PadViewPointsString 
    { 
     get => padViewPointsString; 
     set 
     { 
      padViewPointsString = value; 
      PadViewPoints = JsonConvert.DeserializeObject<Xamarin.Forms.Point[]>(value); 
     } 
    } 

    public Xamarin.Forms.Point[] PadViewPoints { get; set; } 
} 

這將使類反序列化字符串每次你設置它的值(例如,當你從序列化數據庫中得到它)。

Obs。這個例子是使用Newtonsoft.Json庫

希望這有助於! :)

+0

謝謝;你知道我可以如何設置'padView.Points'到Deserialized'Point'數組(例如在加載時)嗎?它需要是「IEnumerable '? – HappyCoding

+1

DatabaseItem類的屬性PadViewPoints是一個Point(Point [])的數組,因此,根據您給出的示例,它應該是'var someDatabaseItem = new DatabaseItem(){PadViewPoints = padView.Points.ToArray()} '。或者,如果您已經有了變量:'someDatabaseItem.PadViewPoints = padView.Points.ToArray()'。 –