我正在开发一个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?非常感谢所有的答案!恩里科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。