从我有这个linq查询来从IQueryable构建一个json(由字符串和布尔值组成):
var ret = from c in results select new { country = c.EN, schengen = c.Schengen };
我想手动添加新项目:(伪代码)
ret = ret /* add this -> */ { country = "some new country", schengen = true }
我尝试这样做:
//End up with cannot convert from AnonymousType#2 to AnonymousType#1
var listRet = ret.ToList();
listRet.Add(new { country ="", schengen = true });
由于它是我创建的匿名类型,因此找不到添加它的方法。我总是以转换错误告终
最佳答案
匿名类型仍然是静态类型的,并且C#编译器为每个匿名类型定义事件生成一个单独的类。在这种情况下,您需要一个命名类。无论如何,这都是对数据传输对象的好习惯。我使用数据标注和DataContractJsonSerializer这样的JSON DTO。
[DataContract]
public class CountryInfo
{
[DataMember(Name = "country")]
public string Country { get; set; }
[DataMember(Name = "schengen", EmitDefaultValue = false)
public bool? Schengen { get; set; }
}
这样,我就有了一个文档齐全的JSON“协议”,它在序列化之前也使用C#命名约定,但在序列化之后使用JS命名约定。
关于c# - 无法将手动匿名项目添加到IQueryable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13398526/