【发布时间】:2019-10-16 14:48:45
【问题描述】:
我是 Jil.JSON 的新手。 我正在使用“JSON.DeserializeDynamic”,因为“JSON”字符串总是因不同客户的要求而异。
在我的代码中,我使用的是“foreach”。 'keyValue' 是具有 'Key' 和 'Value' 属性的动态。
我正在尝试获取 'keyValue.Value Type' 和 'keyValue.Value StringValue' 的值,但我不知道如何获取这些非公共成员的值。
需要获取Type和StringValue
这是我的代码示例:
string json = "{\"Items\":[{ \"Name\":\"Ballpen\", \"Price\":12.3 },{ \"Name\":\"Pencil\", \"Price\":3.21 }],\"Date\":\"21112019\"}";
using (var str = new StringReader(json ))
{
foreach (var keyValue in JSON.DeserializeDynamic(@str, Jil.Options.IncludeInherited))
{
//check the keyValue.Value Type
//if keyValue.Value Type is string, get the StringValue
};
}
我尝试使用 'keyValue.GetType()' 但它给了我不同的属性。
已编辑:
我快到了……
json = "{\"Items\":[{ \"Name\":\"Ballpen\", \"Price\":12.3 },{ \"Name\":\"Pencil\", \"Price\":3.21 }],\"Date\":\"21112019\"}";
Dictionary<string, object> la = JSON.Deserialize<Dictionary<string, object>>(json);
foreach (var data in la)
{
Console.WriteLine("Key=" + data.Key);
Console.WriteLine("Value=" + data.Value.ToString());
Type t = data.Value.GetType();
MemberInfo[] members = t.GetMembers(BindingFlags.NonPublic |
BindingFlags.Instance);
foreach (MemberInfo member in members)
{
if(member.Name == "Type")
{
Console.WriteLine(member.Name);
//member.MemberType.GetType();
}
if (member.Name == "StringValue")
{
Console.WriteLine(member.Name);
}
}
}
Key=Items
Value=[{
"Name": "Ballpen",
"Price": 12.3
}, {
"Name": "Pencil",
"Price": 3.21
}]
Type
StringValue
Key=Date
Value="21112019"
Type
StringValue
现在,我需要获取“会员价值”
有什么想法吗?
【问题讨论】:
-
有什么问题?
Items是一个数组。您必须遍历其内容才能访问各个项目。即使使用dynamic,您仍然必须通过索引访问数组成员,例如必须写入dynamic someObject=JSON.DeserializeDynamic(..); var firstName=someObject.Items[0].Name;或foreach(dynamic item in someObject.Items){ var name=item.Name;} -
你绝对是对的......我的情况是如何获得“非公共成员”的价值...... keyValue.Value.Type keyValue.Value StringValue 但是,这些不起作用
-
![error] (ibb.co/7RGBPZw) 我尝试使用 keyValue.Value.Type 我收到错误
-
如果您想访问原始值,为什么不反序列化为
Dictionary<string,object>?或者使用 JSON.NET - 您不是在 反序列化 JSON 字符串,而是在尝试访问单个值。这就是两个库提供的原始 JSON 对象的工作 -
![使用 Dictionary] (ibb.co/zXH9yZg) 我尝试使用
Dictionary
但仍然......我无法访问“Type”和“StringValue”属性。 ..我做错了吗?