无法序列化列表<>使用 DataContractJsonSerializer DynamicProxy2 生成的对象
我在使用 System.Runtime.Serialization.Json.DataContractJsonSerializer 序列化代理对象的 List
using System.Collections.Generic;
using System.Runtime.Serialization;
using Castle.DynamicProxy;
using System.IO;
using NUnit.Framework;
[DataContract]
public class SimpleViewModel
{
[DataMember]
public virtual int ID { get; set; }
}
[Test]
public void TestSerializeArray()
{
// Generates a proxy of type "SimpleViewModelProxy"
var proxyModel = (new ProxyGenerator()).CreateClassProxy<SimpleViewModel>();
proxyModel.ID = 1;
//Put it into List<> (it can handle a single item without issue!)
var list = new List<SimpleViewModel> { proxyModel };
var serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(List<SimpleViewModel>));
using (var stringWriter = new MemoryStream())
{
serializer.WriteObject(stringWriter, list); //BOOM CRASH!
}
}
这样做会给我带来以下异常:
System.Runtime.Serialization.SerializationException : 类型 'Castle.Proxies.SimpleViewModelProxy' 带有数据合约名称 'SimpleViewModelProxy:http://schemas.datacontract.org/2004/07/ Castle.Proxies' 不是预期的。 考虑使用 DataContractResolver 或添加任何静态未知的类型 到已知类型列表 - 对于 例如,通过使用 KnownTypeAttribute 属性或通过 将它们添加到已知列表中 类型传递给 DataContractSerializer。
我可以序列化单个“SimpleViewModelProxy”对象或 List
,但不能序列化 List
。有没有人有过让这个工作的经验?他们可以提供一些关于我做错了什么的指示吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以尝试将代理的类型添加到已知类型列表中:
You can try to add the type of the proxy to the list of known types: