我有一个我序列化的DTO类
Json.Serialize(MyClass)
Run Code Online (Sandbox Code Playgroud)
我怎样才能排除它的公共财产?
(它必须是公开的,因为我在其他地方的代码中使用它)
我们有一些配置文件是通过使用Json.net序列化C#对象生成的.
我们希望将序列化类的一个属性从简单的枚举属性迁移到类属性.
一个简单的方法是将旧的enum属性保留在类上,并在我们加载配置时安排Json.net读取此属性,但是当我们下次序列化对象时不要再次保存它.我们将分别从旧枚举中处理生成新类.
是否有任何简单的方法来标记(例如,使用属性)C#对象的属性,以便Json.net仅在序列化时忽略它,但在反序列化时要注意它?
在开发ASP.NET MVC应用程序时,我发现了一些我的JsonResult操作引发异常的地方"序列化对象时检测到循环引用".
现在,我正在删除有问题的引用,但理想情况下我只想标记属性,使JSON序列化程序忽略它.
谁能建议我怎么做?
我正在WCF中创建一个返回JSON的Web服务,但是DataContractJsonSerializer正在使用一些循环引用(在这种特殊情况下我无法删除).
相反,我想使用Newtonsoft json库.在WCF中创建自定义序列化程序的最简单方法是什么?
注意:我知道我可以返回一个流,但我不希望操作代码知道序列化的东西.
我的模型中有一个圆形对象图,但这是不可避免的.
根据本文中给出的建议,我使用了所有成员DataContractAttribute并设置IsReference = true了所有成员.我还提供了DataMemberAttribute我要序列化的所有属性.
为了确保序列化程序不再出现任何问题,我只选择不序列化导航属性.
但是,我的catch块中仍然遇到异常.例外的细节如下:
_innerException: {"Type
'System.Data.Entity.DynamicProxies.Author_615FB9F8BB22B55A7CA168DA5ED29EC6A0B59F62FD79D1346045351BE2F163A4' with data contract name
'Author_615FB9F8BB22B55A7CA168DA5ED29EC6A0B59F62FD79D1346045351BE2F163A4:
http://schemas.datacontract
.org/2004/07/System.Data.Entity.DynamicProxies' is not expected.
Consider using a
DataContractResolver or add any types not known statically to
the list of known types - for
example, by using the KnownTypeAttribute attribute or by adding them
to the list of known types
passed to DataContractSerializer."}
Run Code Online (Sandbox Code Playgroud)
我可以但不希望:
1)禁用代理创建.我可以删除代理创建只是为了序列化,我可能会这样做.但我也想知道为什么我仍然得到例外以及我能做些什么.
2)删除循环引用.原因:这些类型的引用在Entity Framework生成的模型中非常常见.如果我要在模型中做一个800 - 1000个类的大项目,那么通过删除循环引用来实现它是一个噩梦.
我在下面描述了这个小尖峰解决方案的架构元素.
数据库架构
Id AuthorName
-------------------------------
1 Charles …Run Code Online (Sandbox Code Playgroud) asp.net asp.net-mvc serialization asp.net-mvc-4 asp.net-web-api