Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用json.net序列化对象并删除“标题”_C#_Json_Serialization_Json.net - Fatal编程技术网

C# 使用json.net序列化对象并删除“标题”

C# 使用json.net序列化对象并删除“标题”,c#,json,serialization,json.net,C#,Json,Serialization,Json.net,嘿,我现在看到的是我在json.net中使用SerializeObject序列化的以下json字符串: { "ServTypeList": [ { "id": 1, "name": "COMPUTER" }, { "id": 2, "name": "MONITOR" }, { "id": 3, "name": "NETWORK COMPONENTS" }, {

嘿,我现在看到的是我在json.net中使用SerializeObject序列化的以下json字符串:

{
  "ServTypeList": [
    {
      "id": 1,
      "name": "COMPUTER"
    },
    {
      "id": 2,
      "name": "MONITOR"
    },
    {
      "id": 3,
      "name": "NETWORK COMPONENTS"
    },
    {
      "id": 4,
      "name": "OFFICE EQUIPMENT"
    },
    {
      "id": 5,
      "name": "SOFTWARE"
    },
    {
      "id": 6,
      "name": "STORAGE"
    }
  ],
  "ServTypeList1": [
    {
      "CurrentVersion": "Jun 23 2017 (0 days ago)",
      "theQuery": "SELECT id,name\tFROM servType"
    }
  ]
}
这是我的C代码,以便按照上面的格式进行格式化:

string json = JsonConvert.SerializeObject(_ServTypeList, Formatting.Indented);
_ServTypeList是一种数据集格式,其名称为ServTypeList

现在我想取出类型列表,从json字符串中获取数据数组

所以我试过这样的方法:

var trying = json["TypeList"];
但这给了我一个错误

错误CS1503参数1:无法从“字符串”转换为“int”

所以我不知道为什么要把它转换成int

我如何获取这些信息:

[{
      "id": 1,
      "name": "COMPUTER"
    },
    {
      "id": 2,
      "name": "MONITOR"
    },
    {
      "id": 3,
      "name": "NETWORK COMPONENTS"
    },
    {
      "id": 4,
      "name": "OFFICE EQUIPMENT"
    },
    {
      "id": 5,
      "name": "SOFTWARE"
    },
    {
      "id": 6,
      "name": "STORAGE"
}]
您的对象json是string类型,因此当您尝试执行json[TypeList]时,它需要一个int,因为这就是在指定索引处获取单个字符的方式

例如,如果字符串foo=abc,那么foo[0]将返回“a”。 您不能将类似TypeList的字符串传递给它

有几种方法可以实现你想要的;正则表达式可以很好地工作,将所有内容分组在[]集之间

应该给你想要的。只需这样使用即可:

var pattern = @".*\[([\s\S]*)\],.*";
string servTypeList = Regex.Match(json, pattern).Groups[1].Value;
您的对象json是string类型,因此当您尝试执行json[TypeList]时,它需要一个int,因为这就是在指定索引处获取单个字符的方式

例如,如果字符串foo=abc,那么foo[0]将返回“a”。 您不能将类似TypeList的字符串传递给它

有几种方法可以实现你想要的;正则表达式可以很好地工作,将所有内容分组在[]集之间

应该给你想要的。只需这样使用即可:

var pattern = @".*\[([\s\S]*)\],.*";
string servTypeList = Regex.Match(json, pattern).Groups[1].Value;

通常,您可以在对象类中的公共属性上使用[JsonIgnore]属性,以防止它们首先被序列化。那么你就不必担心以后会移除它们。例如 要序列化程序用户列表,您的用户类可能仅出于演示目的而如下所示-显然,这不是处理密码的最安全方式:

public string DisplayName { get; set; }
public string UserName { get; set; }
public string EmailAddress { get; set; }
[JsonIgnore]
public string Password { get; set; }
在本例中,由于您正在序列化一个数据集,它似乎包含两个表,其中一个是您试图忽略的?您能序列化要保留的数据表吗

string json = JsonConvert.SerializeObject(_ServTypeList.Tables[0], Formatting.Indented);
如果不是,前面的答案对我来说很好,但是你在整个过程中引入了低效率——首先是序列化不需要的信息,然后大概是将其传输到某个地方,然后在另一端过滤掉

以下测试代码:

DataSet ds = new DataSet();
DataTable dt1 = new DataTable();
dt1.Columns.Add("id", typeof(int));
dt1.Columns.Add("name", typeof(string));

ds.Tables.Add(dt1);

for (int i = 0; i < 10; i++)
{
    DataRow dr = dt1.NewRow();
    dr["id"] = i;
    dr["name"] = "Item " + i.ToString();
    dt1.Rows.Add(dr);
}

string s = JsonConvert.SerializeObject(ds.Tables[0]);
Debug.WriteLine(s);

通常,您可以在对象类中的公共属性上使用[JsonIgnore]属性,以防止它们首先被序列化。那么你就不必担心以后会移除它们。例如 要序列化程序用户列表,您的用户类可能仅出于演示目的而如下所示-显然,这不是处理密码的最安全方式:

public string DisplayName { get; set; }
public string UserName { get; set; }
public string EmailAddress { get; set; }
[JsonIgnore]
public string Password { get; set; }
在本例中,由于您正在序列化一个数据集,它似乎包含两个表,其中一个是您试图忽略的?您能序列化要保留的数据表吗

string json = JsonConvert.SerializeObject(_ServTypeList.Tables[0], Formatting.Indented);
如果不是,前面的答案对我来说很好,但是你在整个过程中引入了低效率——首先是序列化不需要的信息,然后大概是将其传输到某个地方,然后在另一端过滤掉

以下测试代码:

DataSet ds = new DataSet();
DataTable dt1 = new DataTable();
dt1.Columns.Add("id", typeof(int));
dt1.Columns.Add("name", typeof(string));

ds.Tables.Add(dt1);

for (int i = 0; i < 10; i++)
{
    DataRow dr = dt1.NewRow();
    dr["id"] = i;
    dr["name"] = "Item " + i.ToString();
    dt1.Rows.Add(dr);
}

string s = JsonConvert.SerializeObject(ds.Tables[0]);
Debug.WriteLine(s);

不要序列化整个数据集,只需序列化所需的表,如@Elemental Pete:string json=JsonConvert.SerializeObject\u ServTypeList.Tables[ServTypeList],Formatting.Indented;不要序列化整个数据集,只需序列化所需的表,如@Elemental Pete:string json=JsonConvert.SerializeObject\u ServTypeList.Tables[ServTypeList],Formatting.Indented;很好,马特。谢谢很好,马特。谢谢