C# 序列化从 sqlite 返回的 DataTable 结果正在返回 XML 格式

标签 c# sqlite .net-core asp.net-core-2.1

我正在使用 .net core(2.1) Web 应用程序。我正在实现 Web API,它将连接到 SQLite DB 并获取数据并返回查询结果。这是我使用过的代码。

 using (var connection = new SQLiteConnection("Data Source=D:/SQL-Lite/xxxxx/test.db;Version=3;")) {
                connection.Open();

                using (var transaction = connection.BeginTransaction())
                {
                    var selectCommand = connection.CreateCommand();
                    selectCommand.Transaction = transaction;
                    selectCommand.CommandText = "SELECT * FROM Employee";
                    var ds = new DataSet();
                    var da = new SQLiteDataAdapter(selectCommand);
                    da.Fill(ds);

                    if (ds.Tables != null && ds.Tables.Count > 0)
                        response = JsonConvert.SerializeObject(ds.Tables[0]);
                }
            }

之前我曾使用过 SQL Server 和 ASP.NET,在序列化过程中我会以行和列的格式获取 JSON。如下

enter image description here

现在我还获得了 XML 中的一些元数据以及实际数据。我在下面附上序列化数据。

{"DataTable.RemotingVersion":{"Major":2,"Minor":0,"Build":-1,"Revision":-1,"MajorRevision":-1,"MinorRevision":-1},"XmlSchema":"<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<xs:schema xmlns=\"\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n  <xs:element name=\"Table\">\r\n    <xs:complexType>\r\n      <xs:sequence>\r\n        <xs:element name=\"Id\" type=\"xs:long\" msdata:targetNamespace=\"\" minOccurs=\"0\" />\r\n        <xs:element name=\"FirstName\" type=\"xs:string\" msdata:targetNamespace=\"\" minOccurs=\"0\" />\r\n        <xs:element name=\"Salary\" type=\"xs:double\" msdata:targetNamespace=\"\" minOccurs=\"0\" />\r\n        <xs:element name=\"Department\" type=\"xs:string\" msdata:targetNamespace=\"\" minOccurs=\"0\" />\r\n      </xs:sequence>\r\n    </xs:complexType>\r\n  </xs:element>\r\n  <xs:element name=\"tmpDataSet\" msdata:IsDataSet=\"true\" msdata:MainDataTable=\"Table\" msdata:UseCurrentLocale=\"true\">\r\n    <xs:complexType>\r\n      <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\" />\r\n    </xs:complexType>\r\n  </xs:element>\r\n</xs:schema>","XmlDiffGram":"<diffgr:diffgram xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" xmlns:diffgr=\"urn:schemas-microsoft-com:xml-diffgram-v1\">\r\n  <tmpDataSet>\r\n    <Table diffgr:id=\"Table1\" msdata:rowOrder=\"0\">\r\n      <Id>11</Id>\r\n      <FirstName>nithin</FirstName>\r\n      <Salary>5000</Salary>\r\n      <Department>CSE</Department>\r\n    </Table>\r\n  </tmpDataSet>\r\n</diffgr:diffgram>"}

如何在序列化期间避免这些其他数据并仅获取实际查询结果(行和列)?

最佳答案

这应该可以解决问题:

解析类:

public class Response
{
    [JsonProperty("DataTable.RemotingVersion")]
    public object RemotingVersion { get; set; }

    public string XmlSchema { get; set; }

    public string XmlDiffGram { get; set; }
}

public class Table
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public int Salary { get; set; }
    public string Department { get; set; }
}

及用法:

var res = JsonConvert.DeserializeObject<Response>(response);
var doc = XDocument.Parse(res.XmlDiffGram);
var table = doc.Root.XPathSelectElement("tmpDataSet/Table");
var data = new XmlSerializer(typeof(Table)).Deserialize(table.CreateReader());

关于C# 序列化从 sqlite 返回的 DataTable 结果正在返回 XML 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58396080/

相关文章:

c# - 如何获取 SharePoint 列表项作者的电子邮件地址?

c# - 线程池程序在更快的服务器上运行得更慢

.net - Entity Framework SQLite 错误 1 ​​: 'no such table: __EFMigrationsHistory'

c# - 带参数的开放泛型的依赖注入(inject)

c# - 将带有 C 和 asm 代码的程序转换为 DLL

c# - Thread.Sleep( ) 确保 DateTime.Now 不同所需的最短时间是多少?

ios - Sqlite.swift 过滤/查找

c# - 从源代码编译SQLite时如何修复 "cannot find entry point sqlite3_open_v2 in DLL sqlite3"?

c# - 如何在Docker中构建.Net核心应用程序?

visual-studio - 如何计算 visual studio 解决方案中的所有方法