Tag: serialization

序列化组合的function?

这很好用: Func func1 = s => s + “func”; ViewState[“function”] = func1; 但是,这不是: Func func1 = s => s + “func”; Func func2 = s => func1(s); ViewState[“function”] = func2; 它抛出运行时序列化exception: Type ‘MyProjectName._Default+c__DisplayClass3’ in Assembly ‘MyProjectName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null’ is not marked as serializable. 现在,我可以解决这个问题,但是我想了解为什么会发生这种情况,以便将来除了在序列化之前编写函数之外我别无选择,我会有一个解决方案。

ProtoBuf-Net和Compact Framework中的“源数据中的无效字段:0”错误

当使用ProtoBuf-Net在紧凑框架和完整的.Net框架之间进行序列化/反序列化时,是否有人知道任何问题? 我有一个名为LogData的类,我在紧凑框架3.5下进行序列化,传输到服务器(运行.Net framework 4.0),然后反序列化。 有时候它会起作用,有时会引发上述错误,我还没有将其缩小到任何特定原因。 我已经用不同的值做了很多测试,并且在发生错误时似乎找不到任何押韵或理由。 我在下面包括我的课程(减去各种构造函数)。 我已多次查看任一侧的字节缓冲区,但尚未发现通过线路从一侧传输到另一侧的数据存在差异。 [ProtoContract] public class LogData { [ProtoContract] public enum LogSeverity { [ProtoEnum(Name = “Information”, Value = 0)] Information, [ProtoEnum(Name = “Warning”, Value = 1)] Warning, [ProtoEnum(Name = “Error”, Value = 2)] Error, [ProtoEnum(Name = “Critical”, Value = 3)] Critical } [ProtoMember(1)] public string UserID { get; set; } […]

如何使用具有不可变值类型的protobuf-net?

假设我有一个像这样的不可变值类型: [Serializable] [DataContract] public struct MyValueType : ISerializable { private readonly int _x; private readonly int _z; public MyValueType(int x, int z) : this() { _x = x; _z = z; } // this constructor is used for deserialization public MyValueType(SerializationInfo info, StreamingContext text) : this() { _x = info.GetInt32(“X”); _z = info.GetInt32(“Z”); } [DataMember(Order […]

使用JsonConvert.DeserializeObject反序列化派生对象列表

我有这个对象 public class ConversationAPI { [JsonProperty(PropertyName = “lU”)] public DateTime LastUpdated { get; set; } [JsonProperty(PropertyName = “m”, TypeNameHandling = TypeNameHandling.All)] public List Messages { get; set; } } 我作为json从API发送,并在我的客户端应用程序中反序列化。 The List Messages property contains either [Serializable] public class Message { [JsonProperty(PropertyName = “t”)] public string Text { get; set; } [JsonProperty(PropertyName = “ty”)] public […]

xmlNode到对象

我一直在使用第三方基于Java的REST Web服务,它返回一个xmlNodes数组。 xmlNode []会出现一个对象,我正在尝试找出对象中反序列化xmlNode []的最佳方法吗? 是首先建立一个xmlDocument和Deserialize? 谢谢

始终有错误“ObjectContent 1类型无法序列化响应正文…”

我使用Web api从数据库中检索数据。 我只有一个表“tblMessage”,并希望从该表中获取数据。 我设置了所有内容但是当我运行网站时。 错误总是说 ‘ObjectContent`1’类型无法序列化内容类型’application / xml的响应主体 我在stackoverflow上读了一些post,说明错误可以通过告诉浏览器以json格式输出数据来修复。 之后,错误就变成了 ‘ObjectContent`1’类型无法序列化内容类型’application / json的响应主体 我已尝试过以下post中的所有解决方案,但他们没有解决问题(浏览器报告相同的错误) Web API错误:’ObjectContent`1’类型无法序列化内容类型的响应正文 无法序列化内容类型的响应正文 Web API错误:’ObjectContent`1’类型无法序列化内容类型的响应正文 这个错误究竟是什么? public interface IMessage { IQueryable GetAll(); } public class Message { [Key] public int i_StmID { get; set; } public string vch_MsgString { get; set; } } public class EFDBContext : DbContext { public DbSet […]

如何使用Newtonsoft.Json将对象序列化为带有类型信息的json?

当我序列化某些类型的对象时,我希望在JSON中有一个类型名称的属性。 我写了一个转换器: public class TypeInfoConverter : JsonConverter { private readonly IEnumerable _types; public TypeInfoConverter(IEnumerable types) { Contract.Requires(types != null); _types = types; } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { var jObject = JObject.FromObject(value, serializer); jObject.AddFirst(new JProperty(“Type”, value.GetType().Name)); jObject.WriteTo(writer); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { […]

使用Dictionary的Protobuf-net对象引用反序列化:在反序列化期间引用跟踪对象更改了引用

我在使用protobuf-net尝试序列化/反序列化复杂对象图时遇到了一些问题。 我正在研究遗留应用程序,我们正在使用.Net Remoting将GUI客户端连接到C#服务。 由于使用默认BinaryFormatter对象图的序列化大小,我们看到海外用户的性能不佳,客户端和服务器之间的有限带宽(1Mbit / s)加剧了这种情况。 作为一个快速的胜利,我想我已经整理了一个概念certificate,通过使用protobuf-net代替,通过实现ISerializable来确定是否有任何性能提升。 在我测试时,我遇到了一个问题,即没有维护对象引用。 我汇总了一个重新解决问题的例子。 我希望Dictionary (Items [1])中的对象和对象BA与我在ProtoMember属性中指定的AsReference=true相同。 使用protobuf-net 2.0.0.619 ,我看到反序列化时引发exception(反序列化过程中引用跟踪对象更改了引用)。 如果这不是支持的方案,请告诉我。 测试 [Test] public void AreObjectReferencesSameAfterDeserialization() { A a = new A(); B b = new B(); bA = a; b.Items.Add(1, a); Assert.AreSame(a, bA); Assert.AreSame(bA, b.Items[1]); B deserializedB; using (var stream = new MemoryStream()) { Serializer.Serialize(stream, b); stream.Seek(0, SeekOrigin.Begin); deserializedB […]

从较旧版本的对象反序列化较新版本的对象

假设我有这个课程: [Serializable] public class SomeClass { public SomeClass() {//init} public string SomeString {get;set;} } 应用程序关闭时,此类将获得序列化,并在下次运行时进行反序列化。 然后,我构建它并发布了应用程序,现在该类已更改: [Serializable] public class SomeClass { public SomeClass() {//init} public string SomeString {get;set;} public int SomeInt {get;set;} } 有没有办法在反序列化时将属性设置为默认值,以防在旧的序列化对象中找不到它? 我想到的一种方法是保留类的旧版本,然后检查序列化的版本然后循环旧对象的属性并在新对象中设置它们,但这对我来说没有意义,任何其他有意义的解决方案?

C#和F#lambda表达式代码生成

让我们看看F#为简单函数生成的代码: let map_add valueToAdd xs = xs |> Seq.map (fun x -> x + valueToAdd) 生成的lambda表达式代码(F#function值的实例)如下所示: [Serializable] internal class map_add@3 : FSharpFunc { public int valueToAdd; internal map_add@3(int valueToAdd) { this.valueToAdd = valueToAdd; } public override int Invoke(int x) { return (x + this.valueToAdd); } } 看看几乎相同的C#代码: using System.Collections.Generic; using System.Linq; static class Program { […]