gpt4 book ai didi

c# - 从 JSON 字符串中获取动态键的值

转载 作者:行者123 更新时间:2023-11-30 12:39:00 25 4
gpt4 key购买 nike

我有这个 json 字符串,我想获取每条记录的第 4 行 (iValue, sValue)。我的问题是每条记录的键都不同(基于值的数据类型)。

有什么办法可以在 C# 上执行此操作吗?

这是一个例子:

{ "data": [
{
"pKey": "0",
"Entity": "tableName",
"Attribute": "CID",
"iValue": "13"
},
{
"pKey": "0",
"Entity": "tableName",
"Attribute": "username",
"sValue": "test_user1"
}] }

最佳答案

这是一个很大的实现,您必须为每个 iValuefValue 等实现它,但是,它加快了实现和使用。首先,这里是用法:

string rawJson = "{\"data\":[{\"pKey\":\"0\",\"Entity\":\"tableName\",\"Attribute\":\"CID\",\"iValue\":\"13\"},{\"pKey\":\"0\",\"Entity\":\"tableName\",\"Attribute\":\"username\",\"sValue\":\"test_user1\"}]}";

var values = JsonConvert.DeserializeObject<TakeData>(rawJson).Data.Select(v => v.PureData);

现在 values 包含列表。这是访问每个的用法:

foreach (var val in values)
{
if (val is IntData i)
{
int myInt = i.iValue;
// use the rest of the properties
}
else if (val is StrData s)
{
string myStr = s.sValue;
// use the rest of the properties
}
}

这里是实现:

class TakeData
{
public List<TakeItAll> Data { get; set; }
}

class TakeItAll
{

public int pKey { get; set; }
public string Entity { get; set; }
public string Attribute { get; set; }

private int _iValue;
public int iValue
{
get => _iValue;
set
{
_iValue = value;
PureData = new IntData { pKey = pKey, Entity = Entity, Attribute = Attribute, iValue = iValue };
}
}

private string _sValue;
public string sValue
{
get => _sValue;
set
{
_sValue = value;
PureData = new StrData { pKey = pKey, Entity = Entity, Attribute = Attribute, sValue = sValue };
}
}

public IPureData PureData { get; private set; }

}

interface IPureData
{
int pKey { get; set; }
string Entity { get; set; }
string Attribute { get; set; }
}

class IntData : IPureData
{
public int pKey { get; set; }
public string Entity { get; set; }
public string Attribute { get; set; }
public int iValue { get; set; }
}

class StrData : IPureData
{
public int pKey { get; set; }
public string Entity { get; set; }
public string Attribute { get; set; }
public string sValue { get; set; }
}

当然,您也可以使用一些替代方法。例如在 TakeItAll 中使用枚举来跟踪数据类型(或类型变量)而不是那么多类。但是,这样 values 对象的大小会更大。

class TakeItAll
{

public int pKey { get; set; }
public string Entity { get; set; }
public string Attribute { get; set; }

private int _iValue;
public int iValue
{
get => _iValue;
set
{
_iValue = value;
ValType = typeof(string);
}
}

private string _sValue;
public string sValue
{
get => _sValue;
set
{
_sValue = value;
ValType = typeof(int);
}
}

public Type ValType { get; private set; }

}

关于c# - 从 JSON 字符串中获取动态键的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48396162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com