我有一个像这样的简单POCO:
[JsonObject(NamingStrategyType = typeof (CamelCaseNamingStrategy))]
public class MyType
{
public string Id { get; set; }
public string Name;
[JsonExtensionData(ReadData = true, WriteData = true)]
public IDictionary<string, object> TypeDetails { get; set; }
}
和一个给我一个MyType
列表的方法
我正在尝试返回Dictionary<string,object>
的列表,其中包含我获得的对象列表的所有TypeDetails。
像这样:
types.Select((myType) => myType.TypeDetails)
然而,当我运行它时,我得到的是一个字典列表,但具有以下形状:
[
{TypeDetails: {the dictionary i want},
{TypeDetails: {the dictionary i want}},
(...)
]
我的期待:
[
{the dictionary i want},
{the dictionary i want},
(...)
]
澄清:我希望这是真的:
types[0].TypeDetails.equals(r[0])
就像我在做什么一样
types.Select((myType) => new {myType.TypeDetails})
如果我得到任何其他属性,那么select就像我预期的那样。 我找不到任何表明字典是否得到特殊处理的文档,也没有任何其他线索可以解释为什么会出现这种情况。
答案 0 :(得分:0)
在词典的值上使用.SelectMany(),如下所示:
types.SelectMany((myType) => myType.TypeDetails.Values)
答案 1 :(得分:0)
你的回报期望/描述都是:
我正在尝试返回
列表Dictionary<string,Object>
或,(假设(myType)
的类型为MyType
),您的真实代码不匹配:
types.Select((myType)=&gt; myType.TypeDetails)
下面的示例代码确实返回了Dictionary<string,Object>
的集合,看看代码与它的不同之处会很有趣:
var data = new[]
{
new MyType()
{
TypeDetails = new Dictionary<string, object>() { { "foo", "bar" } }
},
new MyType()
{
TypeDetails = new Dictionary<string, object>() { { "baz", "qux" } }
},
};
var r = data.Select(d => d.TypeDetails);