从我有这个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/

10-13 06:53