草庐IT

SERIALIZATION

全部标签

c# - 如何在 C#.NET 中不同类型的对象之间进行深度复制

我需要按字段名称映射ObjectV1和ObjectV2之间的所有字段值和子集合。ObjectV2与ObjectV1位于不同的命名空间中。模板ClassV1和ClassV2之间的继承已被打折,因为这2个类需要独立发展。我考虑过同时使用反射(速度很慢)和二进制序列化(速度也很慢)来执行公共(public)属性的映射。是否有首选方法?还有其他选择吗? 最佳答案 作为每次都使用反射的替代方法,您可以创建一个辅助类,它使用Reflection.Emit动态创建复制方法-这意味着您只会在启动时受到性能影响。这可能会为您提供所需的灵active和

c# - 是否可以将 Protobuf-Net 与没有无参数构造函数的类一起使用?

使用Protobuf-Net,我发现在没有无参数构造函数的情况下似乎无法反序列化一个类,或者我可能遗漏了什么?我不想要某些具有无参数构造函数的类。我可以使用某种属性或其他技术吗? 最佳答案 protobuf-net目前依赖于无参数构造函数来工作。然而,该构造函数不需要是公共(public)的(itwillusereflectionifneedbetoinvokeit),因此您可以定义仅供protobuf-net使用的所需私有(private)构造函数(添加关于原因的注释)并在那里处理特定的序列化相关问题。这可以防止您的api的其余部

c# - 具有多态子对象的类型的 Json.Net 序列化

我们希望能够从/向C#类序列化/反序列化json,主类具有多态子对象的实例。使用Json.Net的TypeNameHandling.Auto设置很容易做到这一点。但是,我们希望在没有“$type”字段的情况下这样做。第一个想法是能够将“$type”重命名为我们选择的值,并使该类型的值成为一个可以正确映射子类型的枚举。我还没有将其视为一种选择,但很高兴听到它是否可行。第二个想法是沿着以下几行……下面是类的第一次传递,顶级类有一个指示符(SubTypeType),指示子对象(SubTypeData)中包含什么类型的数据。我深入研究了Json.Net文档并尝试了一些方法,但没有成功。我们目前

c# - 调试器可视化工具和 "Type is not marked as serializable"

我正在尝试创建一个调试器可视化工具,它会显示任何Control的控件层次结构。它已完成,但我收到异常“类型未标记为可序列化”。我该如何克服呢?控件是.NETWindows窗体框架类型,我无法将其标记为可序列化。 最佳答案 您还需要实现VisualizerObjectSource执行自定义序列化。例子:publicclassControlVisualizerObjectSource:VisualizerObjectSource{publicoverridevoidGetData(objecttarget,StreamoutgoingD

c# - C#有解析多层级联JSON的库吗?

是否有一个库(首选C#)来解决我称之为多级级联JSON的问题?这是我的意思的一个例子:(伪代码/C#)varjson1=@"{""firstName"":""John"",""lastName"":""Smith""}";varjson2=@"{""firstName"":""Albert""}";varjson3=@"{""phone"":""12345""}";varcascadingJSON=JSON.Cascade(json1,json2,json3);结果(与CSS行为相同){"firstName"":"Albert",/*Overridden*/"lastName"":"S

C# XML 文件有错误 (2, 2)

我正在尝试反序列化以下XML:Messageid'1'wasalreadysubmitted.通过这个调用:[...]varx=SerializationHelper.Deserialize(nResp);[...]publicstaticTDeserialize(stringxml){using(varstr=newStringReader(xml)){varxmlSerializer=newXmlSerializer(typeof(T));return(T)xmlSerializer.Deserialize(str);}}获取对应类的实例://---------

c# - 系统.Runtime.Serialization.InvalidDataContractException : No set method for property

如错误所示,我的属性没有setter,但我不想要setter,它应该是只读的。 最佳答案 已编辑:使二传手成为内部。这仍然可以在程序集中设置,但这是一个很好的技巧,当用于位于其他人使用的程序集中的数据对象时效果很好,因为那些使用程序集的人将无法设置该属性,但是各种序列化程序都可以。 关于c#-系统.Runtime.Serialization.InvalidDataContractException:Nosetmethodforproperty,我们在StackOverflow上找到一个类

C# 序列化字典 <ulong,ulong> 到 JSON

我正在尝试将字典序列化为JSON,并出现以下异常:newJavaScriptSerializer().Serialize(mydict)`Type'System.Collections.Generic.Dictionary`2[[System.UInt64,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089],[System.Nullable`1[[System.UInt64,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77

c# - 在 Json.NET 序列化中忽略基类属性

我有以下类结构:[JsonObject]publicclassPolygon:IEnumerable{publicListVertices{get;set;}publicAxisAlignedRectangleEnvelope{get;set;}}publicclassAxisAlignedRectangle:Polygon{publicdoubleLeft{get;set;}...}我正在序列化Polygon类,但是当我这样做时,我得到一个JsonSerializationException,以及消息Selfreferencingloopdetectedforproperty'Env

c# - 有什么理由不使用 XmlSerializer?

我刚刚了解了.Net中的XmlSerializer类。之前我总是使用标准类来解析和编写我的XML。在深入探讨之前,我想知道在某些情况下它是否不是正确的选择。编辑:我所说的标准类是指XmlDocument、XmlElement、XmlAttribute等。 最佳答案 使用XmlSerializer时有很多限制:您必须有一个public无参数构造函数(正如idlewire在评论中提到的,它不必是公开的)只有公共(public)属性被序列化接口(interface)类型不能序列化和其他一些人...这些约束通常会迫使您做出某些您在其他情况下