簡體   English   中英

如何將Json輸出保存到C#中的SQLite數據庫?

[英]How do I save Json output to a SQLite database in c#?

我正在嘗試以xamarin形式制作一個從bittrex獲取信息的應用程序,然后將其放入模型中,然后將其保存到本地SQLite數據庫中。

這是我將代碼保存到數據庫的代碼:

    public class CoinsDatabase
{
    readonly SQLiteAsyncConnection database;

    public CoinsDatabase(string dbPath)
    {
        database = new SQLiteAsyncConnection(dbPath);
        database.CreateTableAsync<Coins>().Wait();
    }

    public Task<List<Coins>> GetCoinsAsync()
    {
        return database.Table<Coins>().ToListAsync();
    }

    public Task<Coins> GetCoinsAsync(int id)
    {
        return database.Table<Coins>().Where(i => i.CoinID == id).FirstOrDefaultAsync();
    }

    public Task<int> SaveCoinAsync(Coins coin)
    {
        if(coin.CoinID == 0){
            return database.InsertAsync(coin);
        } else {
            return database.UpdateAsync(coin);
        }
    }

    public Task<int> DeleteCoinAsync(Coins coin)
    {
        return database.DeleteAsync(coin);
    }

這是獲取和處理Json信息的代碼:

async void Save_Clicked(object sender, System.EventArgs e)
    {
        if (CoinNameEntry.Text != null){
            var uri = new Uri("https://bittrex.com/api/v1.1/public/getmarketsummary?market=btc-" + CoinNameEntry.Text.ToLower());

            HttpClient httpClient = new HttpClient();

            var response = await httpClient.GetAsync(uri);
            if (response.IsSuccessStatusCode)
            {
                var content = await response.Content.ReadAsStringAsync();
                Coins coins = JsonConvert.DeserializeObject<Coin>(content);
                var coinItem = (Coins)coins["result"].ToObject<Coins>();
                await App.Database.SaveCoinAsync(coinItem);
                await Navigation.PopAsync();
            } else {
                await DisplayAlert("Alert", "An error occured getting the coininformation of " + CoinNameEntry.Text.ToUpper(), "OK");
            }

        } else {
            await DisplayAlert("Alert", "Please select a Coin first", "OK");
        }
    }

這是我的硬幣模型:

    public class Coins
{
    public List<Coin> coins { get; set; }
}
public class Coin
{
    [PrimaryKey, AutoIncrement]
    public int CoinID { get; set; }
    public string CoinName { get; set; }
    public bool Notification { get; set; }
    public string MarketName { get; set; }
    public double High { get; set; }
    public double Low { get; set; }
    public double Volume { get; set; }
    public double Last { get; set; }
    public double BaseVolume { get; set; }
    public bool TimeStamp { get; set; }
    public double Bid { get; set; }
    public double Ask { get; set; }
    public int OpenBuyOrders { get; set; }
    public int OpenSellOrders { get; set; }
    public double PrevDay { get; set; }
    public string Created { get; set; }

}

我一直在努力使它工作一個星期,我想知道是否有人知道我做錯了什么,或者有人是否提供解決此問題的技巧。

請記住,我是xamarin和C#的初學者:)

OK,嘗試以下操作:首先,將JsonProperty添加到您的錢幣類中,以將結果映射到正確的屬性:

public class Coins
{
    [JsonProperty("result")]
    public List<Coin> coins { get; set; }
}

然后在代碼中替換以下兩行:

Coins coins = JsonConvert.DeserializeObject<Coin>(content);
var coinItem = (Coins)coins["result"].ToObject<Coins>();

Coins coins = JsonConvert.DeserializeObject<Coins>(content);
var coinItem = coins.coins[0];

請注意,這將為您提供列表中的第一個硬幣-如果要從列表中的其他位置檢索硬幣,請更改索引或使用LINQ。

我也非常懷疑您的SQLite代碼不會執行您想要的操作。 當前,您的所有方法都作用於Coins對象而不是Coin對象。 嘗試將方法更改為

readonly SQLiteAsyncConnection database;

public CoinsDatabase(string dbPath)
{
    database = new SQLiteAsyncConnection(dbPath);
    database.CreateTableAsync<Coin>().Wait();
}

public Task<List<Coin>> GetCoinsAsync()
{
    return database.Table<Coin>().ToListAsync();
}

public Task<Coin> GetCoinsAsync(int id)
{
    return database.Table<Coin>().Where(i => i.CoinID == id).FirstOrDefaultAsync();
}

public Task<int> SaveCoinAsync(Coin coin)
{
    if(coin.CoinID == 0){
        return database.InsertAsync(coin);
    } else {
        return database.UpdateAsync(coin);
    }
}

public Task<int> DeleteCoinAsync(Coin coin)
{
    return database.DeleteAsync(coin);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM