Tag: 序列化

如何使用Json.Net序列化/反序列化具有其他属性的自定义集合

我有一个自定义集合(实现IList),它有一些自定义属性,如下所示: class FooCollection : IList { private List _foos = new List(); public string Bar { get; set; } //Implement IList, ICollection and IEnumerable members… } 当我序列化时,我使用以下代码: JsonSerializerSettings jss = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Auto }; string serializedCollection = JsonConvert.SerializeObject( value , jss ); 它正确地序列化和反序列化所有收集项目; 但是,不考虑FooCollection类中的任何额外属性。 无论如何将它们包含在序列化中?

JSON.Net的“自检示循环检测”exception

我有一些代码将List对象发送到我的View(ASP.Net MVC): public ActionResult getRouteFromPart(int partId) { List routes = _routeService.GetRouteByPartType(partId); if (routes == null) { return this.AdvancedJsonResult(null, JsonRequestBehavior.AllowGet); } return this.AdvancedJsonResult(new { Routes = routes }, JsonRequestBehavior.AllowGet); } 但我在AdvancedJsonResult类中遇到exception: if (Data != null) { var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }; string result = JsonConvert.SerializeObject(this.Data, this.Formatting, settings); response.Write(result); } 我已经尝试了“ReferenceLoopHanding.Ignore”技巧,它使exception静音,但列表仍未传递给视图。 […]

当你没有类的源代码时,是否可以对对象进行.NET二进制序列化?

我正在使用BinaryFormatter对C#中的某些对象进行二进制序列化。 但是,某些对象包含我通过DLL访问但没有源代码的类,因此我无法使用Serializable属性标记它们。 是否有一种简单的方法来序列化它们? 我有一个解决方法,涉及获取类NoSource并创建一个新类SerializableNoSource ,构造函数接受一个NoSource对象并NoSource提取我需要的所有信息,但它很糟糕。 还有更好的选择吗?

Newtonsoft.JSON无法使用TypeConverter属性转换模型

我有一个C#MVC应用程序,它将数据作为JSON字符串存储在XML文档中,也存储在MySQL数据库表中。 最近我收到了在MySQL数据库字段中存储JSON字符串的要求,要通过Newtonsoft.Json转换为C#对象 ,所以我决定实现一个TypeConverter将JSON字符串转换为自定义C#模型。 不幸的是,当TypeConverter属性添加到我的C#Model时,我无法在我的解决方案中的任何地方使用以下命令来反序列化我的JSON字符串: JsonConvert.DeserializeObject(json); 删除属性可以解决问题但是这会阻止我将MySQL DB字段转换为自定义C#对象。 这是我添加了TypeConverter属性的C#模型 : using System.ComponentModel; [TypeConverter(typeof(FooConverter))] public class Foo { public bool a { get; set; } public bool b { get; set; } public bool c { get; set; } public Foo(){} } 这是我的TypeConverter类 : using Newtonsoft.Json; using System; using System.ComponentModel; public class FooConverter : TypeConverter { public […]

ShouldSerialize *()vs *指定的条件序列化模式

我知道ShouldSerialize *模式和* Specified模式以及它们是如何工作的,但两者之间有什么区别吗? 当某些事物应该有条件地序列化时,是否有任何“陷阱”使用一种方法而不是另一种方法? 此问题特定于XmlSerializer的用法,但也欢迎有关此主题的一般信息。 关于这个主题的信息非常少,所以可能是因为它们执行完全相同的目的而且它是一种风格选择。 但是,.NET实现者通过reflection分析类并查找其中一个/两个模式来确定生成的序列化程序的行为,因为它减慢了序列化程序的生成,除非它只是一个向后兼容性工件,这似乎很奇怪。 编辑:对于那些不熟悉这两种模式的人,如果*Specified属性或ShouldSerialize*方法返回true,则该属性被序列化。 public string MyProperty { get; set; } //*Specified Pattern [XmlIgnore] public bool MyPropertySpecified { get{ return !string.IsNullOrWhiteSpace(this.MyProperty); } } //ShouldSerialize* Pattern public bool ShouldSerializeMyProperty() { return !string.IsNullOrWhiteSpace(this.MyProperty); }