[英]Create object in a loop C#
我是 C# 的新手,我正在尝试通过遍历字符串数组来创建 object: indexKeys = ["A", "B", C"]
。
indexKeys
的元素是事先不知道的。
我有一个 Object data
,其中一些键存在于indexKeys
中:
data = {"A": "string1", "B": "string2", "C": "string3", "D": "string4"}
最终的 object token
必须是以下序列化形式:
{
"A": {
"S": "string1"
},
"B": {
"S": "string2"
},
"C": {
"S": "string3"
}
}
我下面的代码肯定是错误的,但我对 C# 中的数据类型感到困惑。
private string getToken(Object data, string[] indexKeys){
Token token = new Token{};
foreach(string i in indexKeys){
token.Add(i: {S: data[i]});
}
//return serialized token
}
如何实现getToken
以获得所需的结果?
您可以像这样使用Dictionary
:
var dataDictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(data);
var response = new Dictionary<string, object>();
foreach (var item in dataDictionary)
{
response.Add(item.Key, new { S = item.Value });
}
var json = JsonConvert.SerializeObject(response);
当data
为 object 并直接使用(带反射)时:
static string GetToken(object data, IEnumerable<string> indexKeys)
{
var dict = new Dictionary<string, object>();
foreach (var key in indexKeys)
{
dict.Add(key, new { S = data.GetType().GetProperty(key).GetValue(data, null).ToString() });
}
return JsonSerializer.Serialize(dict);
}
static void Main(string[] args)
{
var indexKeys = new List<string>() { "A", "B", "C" };
var data = new { A = "string1", B = "string2", C = "string3", D = "string4" };
var result = GetToken(data, indexKeys);
Console.WriteLine(result);
}
如果您将data
作为字典而不是 object 提供:
static string GetToken(Dictionary<string, string> data, IEnumerable<string> indexKeys)
{
var dict = new Dictionary<string, object>();
foreach (var key in indexKeys)
{
dict.Add(key, new { S = data[key] });
}
return JsonSerializer.Serialize(dict);
}
static void Main(string[] args)
{
var indexKeys = new List<string>() { "A", "B", "C" };
var dataDict = new Dictionary<string, string>()
{
{ "A", "string1" },
{ "B", "string2" },
{ "C", "string3" },
{ "D", "string4" }
};
var result = GetToken(dataDict, indexKeys);
Console.WriteLine(result);
}
当data
为 object 但不使用反射时:
static string GetToken(object data, IEnumerable<string> indexKeys)
{
var dataDict = JsonSerializer.Deserialize<Dictionary<string, object>>(JsonSerializer.Serialize(data));
var dict = new Dictionary<string, object>();
foreach (var key in indexKeys)
{
dict.Add(key, new { S = dataDict[key] });
}
return JsonSerializer.Serialize(dict);
}
static void Main(string[] args)
{
var indexKeys = new List<string>() { "A", "B", "C" };
var data = new { A = "string1", B = "string2", C = "string3", D = "string4" };
var result = GetToken(data, indexKeys);
Console.WriteLine(result);
}
所有这些解决方案都假定您的data
对象/字典将包含indexKeys
中的所有键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.