直接序列化Linq结果到JSON

本文关键字:JSON 结果 Linq 序列化 | 更新日期: 2023-09-27 18:11:41

我正在开发一个WebService,执行linq到sql数据库,并把结果放入VAR变量。然后我想用javascript序列化器(c#)将VAR内的结果序列化为json格式。像这样:

var sb= from p in ent.people .........
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new       System.Runtime.Serialization.Json.DataContractJsonSerializer(sb.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, sb);
string json = System.Text.Encoding.Default.GetString(ms.ToArray());

但是我得到一个像这样的错误响应:

Type      'System.Data.Objects.ObjectQuery`1[<>f__AnonymousType2d`5[System.String,System.Nu llable`1[System.Int32],System.Nullable`1[System.Int32],System.Int32,System.String]]' cannot be serialized. 

考虑用DataContractAttribute属性标记它,并用DataMemberAttribute属性标记您想要序列化的所有成员。如果类型是一个集合,请考虑使用CollectionDataContractAttribute标记它。有关其他支持的类型,请参阅Microsoft . net Framework文档。

如何将LINQ结果直接序列化到JSON?非常感谢所有的答案!恩里科

直接序列化Linq结果到JSON

DataContractJsonSerializer不支持匿名对象。如果你想序列化匿名对象,你可以使用JavaScriptSerializer类:

var sb = from p in ent.people .........
var serializer = new JavaScriptSerializer();
string json = serializer.Serialize(sb);

您可以使用Newtonsoft。JSON用于

下面是语法

var sb = from p in ent.people .........
string json = JsonConvert.SerializeObject(sb);

在我的上一份工作中,我们看到了这种行为,并花了一些时间来解决它。

首先,您需要IQ Toolkit,可以从CodePlex免费获得。在它的库中有一个"PartialEvaluator",它可以通过查找总是求值为更简单节点的节点,以及用常量替换对"外部闭包"的引用,来降低许多表达式树的复杂性。在尝试序列化它之前,你需要通过这个运行你的IQueryable。

然后,为了使用JSON DataContract序列化器,必须将希望序列化的类设置为DataContract。到处都有这样做的教程;基本上,您只需用属性修饰类、任何包含的类以及想要序列化的成员。

一旦你有了这两个东西,你的对象和它的IQueryable成员应该可以使用DataContractJsonSerializer序列化为JSON。