相关疑难解决方法(0)

DataTable,如何有条件地删除行

我参与了一个C#学习过程,到目前为止进展顺利.然而,我刚刚打了我的第一个"说什么?" 时刻.

DataTable提供对其Rows集合的随机行访问,不仅通过典型的集合行为,还通过DataTable.Select.但是,我似乎无法将此功能与DataRow.Delete联系起来.到目前为止,这是我需要做的,以便有条件地从表中删除一行或多行.

int max = someDataTable.Rows.Count - 1;
for(int i = max; i >= 0; --i)
{
    if((int)someDataTable.Rows[i].ItemArray[0] == someValue)
    {
        someDataTable.Rows[i].BeginEdit();
        someDataTable.Rows[i].Delete();
    }
    else
        break;
}
someDataTable.AcceptChanges();
Run Code Online (Sandbox Code Playgroud)

但我对这段代码不满意.我都不相信.我肯定错过了什么.如果我需要有条件地删除一行或多行,我真的被迫按顺序点击Rows集合吗?

(不介意反转.我正在从数据表的末尾删除.所以没关系)

c# datatable delete-row

36
推荐指数
3
解决办法
14万
查看次数

DataTable到JSON

我最近需要将数据表序列化为JSON.我在哪里我们仍然在.Net 2.0,所以我不能在.Net 3.5中使用JSON序列化器.我想这一定是有人做过,所以我去网上找,并发现了一个数量不同 选项.其中一些依赖于一个额外的库,我很难在这里推进.其他人需要先转换List<Dictionary<>>,这似乎有点尴尬和不必要.另一个处理所有值,如字符串.出于某种原因,我无法真正落后于他们,所以我决定推出自己的,我发布在下面.

正如您从阅读//TODO评论中看到的那样,它在一些地方是不完整的.这段代码已经在生产中,所以它在基本意义上"起作用".它不完整的地方是我们知道我们的生产数据当前不会命中它的地方(数据库中没有时间跨度或字节数组).我在这里发帖的原因是我觉得这可能会更好一些,我希望能帮助完成和改进这段代码.欢迎任何投入.

请注意,此功能内置于.Net 3.5及更高版本中,因此今天使用此代码的唯一原因是,您仍然只能使用.Net 2.0.即便如此,JSON.Net已成为此类事物的goto库.

public static class JSONHelper
{
    public static string FromDataTable(DataTable dt)
    {
        string rowDelimiter = "";

        StringBuilder result = new StringBuilder("[");
        foreach (DataRow row in dt.Rows)
        {
            result.Append(rowDelimiter);
            result.Append(FromDataRow(row));
            rowDelimiter = ",";
        }
        result.Append("]");

        return result.ToString();
    }

    public static string FromDataRow(DataRow row)
    {
        DataColumnCollection cols = row.Table.Columns;
        string colDelimiter = "";

        StringBuilder result = new StringBuilder("{");       
        for (int i = 0; i < …
Run Code Online (Sandbox Code Playgroud)

.net c# datatable json .net-2.0

19
推荐指数
1
解决办法
3万
查看次数

从C#.NET中的DataTable到JSON

我是C#和.NET的新手,但我已经使这段代码调用存储过程,然后我想获取返回的DataTable并将其转换为JSON.

    SqlConnection con = new SqlConnection("connection string here");
    SqlDataAdapter da = new SqlDataAdapter();
    SqlCommand cmd = new SqlCommand("getDates", con);
    SqlParameter par = new SqlParameter("@PlaceID", SqlDbType.Int);
    par.Value = 42;
    da.SelectCommand = cmd;
    cmd.Parameters.Add(par);
    DataSet ds = new DataSet();
    DataTable dt = new DataTable();

    con.Open();

    try{
        cmd.CommandType = CommandType.StoredProcedure;
        da.Fill(ds);
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是,最好/最简单的方法是什么?一个例子会很棒,因为我还是很陌生.

.net c# datatable json javascriptserializer

14
推荐指数
4
解决办法
6万
查看次数

在WCF中jSON序列化.NET DataTable的最佳方法是什么?

当我将WCF配置为使用jSON序列化并在我的一个DataContracts中包含DataTable时,它会在将整个DataContract序列化为jSON之前将DataTable序列化为XML.我希望将DataTable序列化为jSON,而不是XML.

我的问题是:

  1. 为什么它首先将DataTable序列化为XML?
  2. 如何让它序列化为jSON呢?

.net wcf serialization json json.net

14
推荐指数
2
解决办法
3万
查看次数

使用每行键将DataTable转换为JSON

我认为以下将是一个非常常见的任务,并假设有一个简单的解决方案,但我找不到一个.

如果我有以下结构的数据表.

ID  Name    Active
ID1 John    TRUE
ID2 Bill    FALSE
Run Code Online (Sandbox Code Playgroud)

我想将其序列化为JSON对象,其中ID列是JSON对象中的节点,如:

[
    {
        "ID1": {
            "Name": "John",
            "Active": "True"
        },
        "ID2": {
            "Name": "Bill",
            "Active": "False"
        }
    }
]
Run Code Online (Sandbox Code Playgroud)

我查看了JSON.NET但无法让它工作.编辑:我正在使用C#

c# datatable serialization json json.net

5
推荐指数
1
解决办法
2万
查看次数

在 .Net Core 3.1 中使用 NewtonSoft 将 DataTable 转换为 JSON 字符串时如何获得不含 '\u0022' 或 '\' 等字符的 JSON 字符串

我正在 .net core 3.1 中编写一个简单的 API。要将我的数据表转换为 JSON 字符串,我使用 NewtonSoft 库和以下代码:

string JSONresult = JsonConvert.SerializeObject(dt, Formatting.Indented);
return Json (new { JSONresult });
Run Code Online (Sandbox Code Playgroud)

我得到的输出是 JSON 字符串,但它有很多像 '\u0022' 这样的字符,我知道它是双引号。

{"jsoNresult":"[\r\n  {\r\n    \u0022ID\u0022: 2,\r\n    \u0022FunctionalityName\u0022: \u0022User Upload\u0022,\r\n    \u0022FunctionalityDescription\u0022: \u0022For Bulk Uploading User At Once\u0022,\r\n    \u0022TableName\u0022: \u0022tablename\u0022,\r\n    \u0022ValidationSP\u0022: \u0022user_Validate\u0022,\r\n    \u0022InsertSP\u0022: \u0022Insert_User\u0022\r\n  }\r\n]"}
Run Code Online (Sandbox Code Playgroud)

我想要的是:

{"jsoNresult":"[{"ID": "2","FunctionalityName": "User Upload","FunctionalityDescription": "For Bulk Uploading User At Once","TableName": "tablename","ValidationSP": "user_Validate","InsertSP": "Insert_User"}]"}
Run Code Online (Sandbox Code Playgroud)

我是 c# 新手,但之前曾在 Flask 甚至 Spring Boot 上工作过,他们返回清晰的 json 字符串。

那么我如何在 .net core 3.1 中实现我想要的。PS:我知道使用Formatting.Indented,我可以有或没有它的序列化字符串

c# json json.net asp.net-core-webapi asp.net-core-3.1

5
推荐指数
1
解决办法
6505
查看次数

返回来自WebAPI的数据的json表示,没有强类型的IEnumerable

阅读了大量不同的解决方案并尝试了不同的方法(这里,这里,这里,这里,这里),我从API控制器得到了不同的(和意外的)结果.

我需要通过web api控制器返回表示为JSON的数据表:

[IdentityBasicAuthentication]
[Authorize]
[RequireHttps]
[Route("Reports/Report1")]
public HttpResponseMessage Get()
{
    DataTable dt = MyDAL.GetDataTable();
    if(someValidationFailed){
        Request.CreateResponse(HttpStatusCode.BadRequest, "Friendly error here");
    }
    return Request.CreateResponse(HttpStatusCode.OK, Newtonsoft.Json.JsonConvert.SerializeObject(dt));
}
Run Code Online (Sandbox Code Playgroud)

在Fiddler中,输出似乎被编码为转义字符串:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

"[{\"Site\":\"Headquarters\",\"Department\":\"HR\",\"FirstName\":\"Bob\",\"MiddleName\":null,\"Surname\":\"Fern\",\"EmployeeNumber\":\"444\"},
{\"Site\":\"Headquarters\",\"Department\":\"HR\",\"FirstName\":\"Alice\",\"MiddleName\":null,\"Surname\":\"Smith\",\"EmployeeNumber\":\"769\"}]"
Run Code Online (Sandbox Code Playgroud)

但是,目标是输出普通的Json(如果客户端请求它,则输出XML):

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

[{"Site":"Headquarters","Department":"HR","FirstName":"Bob","MiddleName":null,"Surname":"Fern","EmployeeNumber":"444"},
{"Site":"Headquarters","Department":"HR","FirstName":"Alice","MiddleName":null,"Surname":"Smith","EmployeeNumber":"769"}]
Run Code Online (Sandbox Code Playgroud)

有没有办法在不创建IEnumerable<Person>对象的情况下执行此操作?原因是这个类特定于这一个方法.我也不想使用StringBuilder,因为DataTable可能非常大,我已经看到以前抛出的内存异常.

我是WebAPI的新手,所以答案可能非常简单,但我可以提出更多问题的代码示例会非常有用.

c# json json.net asp.net-web-api

4
推荐指数
1
解决办法
6294
查看次数

使用当前版本的 System.Text.Json.JsonSerializer 序列化 DataSet

您对我们如何 使用System.Text.Json.JsonSerializer序列化 DataSet、DataTable有什么建议吗? 当前它抛出此异常:'检测到不支持的可能的对象循环。这可能是由于循环或对象深度大于最大允许深度 64。

serialization asp.net-core system.text.json

1
推荐指数
1
解决办法
2875
查看次数