从c#

时间:2018-03-16 11:51:27

标签: c# asp.net arrays json

我正在尝试创建一个"图书馆数据库"作为ASP.Net&amp ;;的大学项目的一部分C#,Json用作存储方法。

我是asp.net和c#的完全新手,昨天有人帮我弄清楚如何使用Json数组中的相关数据填充表单中的一系列文本框,当使用该数组中的每个元素进行选择时下拉列表。我们设法让这部分代码启动并运行,但我遇到了新的障碍。

我需要知道如何删除JSON数组中的数据条目。

下面是包含我的Json数组变量的代码

public class Book
{
    public string id { get; set; }
    public string title { get; set; }
    public string author { get; set; }
    public string year { get; set; }
    public string publisher { get; set; }
    public string isbn { get; set; }

    public Book(string id, string title, string author, string year, string publisher, string isbn)
    {
        this.id = id;
        this.title = title;
        this.author = author;
        this.year = year;
        this.publisher = publisher;
        this.isbn = isbn;       
    }
}

以下是我的数组的代码

public class BookList
{
    public List<Book> bookList { get; set; }

    public BookList()
    {
        bookList = new List<Book>();
    }

    public object Where(Func<object, bool> p)
    {
        throw new NotImplementedException();
    }
}

以下是CURRENT Json数据

{
  "bookList": [
    {
      "id": "1",
      "title": "Harry Potter and the Philosopher's Stone",
      "author": "J.K. Rowling",
      "year": "1997",
      "publisher": "Bloomsbury",
      "isbn": "0-7475-3269-9"
    },
    {
      "id": "2",
      "title": "The Hobbit",
      "author": "J. R. R. Tolkien",
      "year": "1937",
      "publisher": "George Allen & Unwin",
      "isbn": "054792822X"
    },
    {
      "id": "3",
      "title": "Nisekoi: False Love",
      "author": "Naoshi Komi",
      "year": "2014",
      "publisher": "Viz",
      "isbn": "9781421557991"
    }
  ]
}

以下是我的删除书页的当前代码

public partial class DeleteBook : System.Web.UI.Page
{
    public const string FILENAME = @"C:\Users\User\Documents\Assessments\19383038_CSE2ICX_Assignment3\JsonFiles\BookList.Json";
    string jsonText = File.ReadAllText(FILENAME);
    BookList bookList = new BookList();

    public void Page_Load(object sender, EventArgs e)
    {
        bookList = JsonConvert.DeserializeObject<BookList>(jsonText);
        if (!IsPostBack)
        {
            ddl.DataTextField = "id";
            ddl.DataValueField = "id";
            ddl.DataSource = bookList.bookList;
            ddl.DataBind();
        }

        var book = bookList.bookList.Where(x => x.id == ddl.SelectedValue).FirstOrDefault();
        txtDeleteID.Text = book.id;
        txtDeleteTitle.Text = book.title;
        txtDeleteAuthor.Text = book.author;
        txtDeleteYear.Text = book.year;
        txtDeletePublisher.Text = book.publisher;
        txtDeleteIsbn.Text = book.isbn;
    }

    protected void btnDeleteBook_Click(object sender, EventArgs e)
    {
        // ...
    }

    protected void btnClearField_Click(object sender, EventArgs e)
    {
        // ...
    }
}

因此,在页面加载中,代码告诉我的表单中的每个文本框,以读取数组中每个变量包含的数据,以及我在下拉列表中选择的ID。

现在我需要做的是删除那些数据而只删除那些数据。我不想具体通过名称来引用数据,因为这个数据库将允许人们输入其他数据,我需要一种方法来确定数据被调用的内容,然后将其删除。这适用于每本书中的所有数据。例如,哈利波特是这个图书馆中列出的一本书,当我点击删除书按钮时,我想要删除有关哈利波特的所有信息。

不幸的是,我没有足够的经验来正确访问JSON中的信息,我已经尝试将数组转换为一个工作但是在这条路上没有任何运气。 .REMOVE函数只允许我处理Int,有人可以帮我解决这个问题,或者理解如何操作这些数据。

对不起,很长的帖子,如果我想要的东西足够清楚,请告诉我,我会尽力解释更详细。提前感谢您收到任何帮助。

1 个答案:

答案 0 :(得分:2)

在按钮中点击删除

protected void btnDeleteBook_Click(object sender, EventArgs e)
{
   var itemToRemove = bookList.bookList.FirstOrDefault(r => r.id == ddl.SelectedValue);
   if(itemToRemove != null)
      bookList.bookList.Remove(itemToRemove);
}

这将从bookList中删除所选书籍。现在将列表序列化为json。

string newJsonText = JsonConvert.SerializeObject(bookList);

还将bookList类重命名为其他类,因为bookList.bookList看起来很混乱。也许bookStore左右