Tag:

反序列化数组不支持JSON反序列化类型

我已经阅读了关于反序列化错误的其他两篇文章,但我没有得到任何结论,所以我发布了自己的问题。 我有一个返回JSON的WCF服务。 在对特定类型进行反序列化时,它会失败。 为了让您轻松复制错误,我将下面的JSON硬编码与调用一起。 基本上你应该能够复制/粘贴下面的代码并看到它失败。 消费者需要将其反序列化为工作对象。 s。反序列化失败,并显示标题中指出的错误消息。 注意:我意识到我的JSON中有斜杠。 那些是为了方便逃避报价。 谢谢。 示例代码: var s = new JavaScriptSerializer(); var jstr = “[{\”UserId\”:1,\”WorkoutId\”:1,\”WorkoutInfo\”:[\”Step 1\”,\”Step 2\”]},{\”UserId\”:2,\”WorkoutId\”:2,\”WorkoutInfo\”:[\”Step 1a\”,\”Step 2a\”]},{\”UserId\”:5,\”WorkoutId\”:0,\”WorkoutInfo\”:[\”new work1\”,\”new work 1\”,\”new work 1\”]}]”; Workout blah = s.Deserialize(jstr); var response = ServicePOST(“AddUserWorkout”, workout); 和锻炼课程: public class Workout { public int UserId { get; set; } public List WorkoutInfo { get; […]

Json字符串反序列化为对象的数组列表

请帮忙! 在反序列化时出现此错误: 无法将“System.String”类型的对象转换为“System.Collections.Generic.List”类型 来自客户端的JSON字符串: “\”[{\\“id \\”:\\“18_0_2_0 \\”,\\“ans \\”:\\“您可以输入自由文本代替* \\”},{\\“ id \\“:\\”23_1_3_1 \\“,\\”ans \\“:\\”刷新按钮\\“},{\\”id \\“:\\”11_2_1_2 \\“,\ \ “ANS \\”:\\ “假\\”}] \ “” 编辑:未转义(见评论): [{“id”:“18_0_2_0”,“ans”:“您可以输入自由文字代替* ”},{“id”:“11_2_1_2”,“ans”:“False”}] JavaScriptSerializer serializer = new JavaScriptSerializer(); List ListAnswers = serializer.Deserialize<List>(str); [Serializable] public class RawAnswer { public string QuestionID { get; set; } public string Answer { get; set; } public RawAnswer() { […]

dotnet dll反编译并更改代码

我需要更改.NET DLL的代码。 我可以通过使用.NETreflection器编译DLL来查看代码,但是我无法更改DLL的代码。 使用.NET Reflector,我将代码反编译并保存到我的硬盘中,但是当我能够重新编译代码时,它会给出错误。 很少有代码以二进制格式反编译,很少有代码用c#反编译。 是否有任何工具可以更改和重新编译DLL? 以下是我用来尝试反编译DLL的工具: ILSpy DisSharp Reflector7.1带有Reflexil插件 Spices.Net.Suite.5.8 部署.NET 1.0.0 devextras.codereflect dotPeek-1.0.0.2545 intellilock JustDecompile_BETA_2011.1.728.1 不幸的是,没有一个工具能够提供完美的源代码来重新编译DLL代码。

从二进制文件中提取对象并放入List

我以前做过这个,但无法弄清楚我是怎么做到的。 我有一个二进制文件,我想存储对象。我已经使用[Serializable]序列化了对象类,并已成功保存到文件中的单个对象。 但是,在尝试读取对象并放入List进行进一步处理时,问题开始出现。 因此,当试图从文件中读取对象时,我有代码: List aListOfStuff = new List(); Stream fileStream = File.OpenRead(“MyFile.DAT”); BinaryFormatter deserializer = new BinaryFormatter(); aListOfStuff = (List)deserializer.Deserialize(fileStream); fileStream.Close(); 当我第一次开始测试时,上面的代码没有生成错误,但是当我尝试写入文件时,我会收到一个exception,因为它正被另一个进程使用而无法访问该文件。 在尝试通过注释掉试图检查文件中已存在的内容并且只保存和刷​​新代码处于活动状态的代码的所有部分进行故障排除时,我会在上面的aListofStuff代码行中收到错误,指出“无法将’myStuff’类型’System.Collections.Generic.List’1.对象转换为’System.Collections.Generic.List’1.是的,1是错误而不是拼写错误。这告诉我,我收到’文件仍然打开’消息的原因是因为没有调用.Close()但这仍然无法帮助我解决问题的根源。 所以我假设我只是不知道/记得如何从文件中拉回一个对象列表。 我在网上搜索了如何执行此操作,但无法找到有关特定于对象列表的信息。 文件中单个序列化对象的大量内容,但不超过一个,我发现序列化的那些文章似乎没有扩展。 这是我用来向文件添加对象的代码: myStuff newThing = new myStuff(string1, string2, string3); Stream fileStream = File.Open(“MyFile.Dat”, FileMode.Append); BinaryFormatter serializer = new BinaryFormatter(); serializer.Serialize(fileStream, newThing); fileStream.Close();

ISerializable是否与具有较少字段的以前版本的类向后兼容?

对不起,如果我说这个问题有点奇怪! 基本上,我有一个可序列化的类,在当前时间只有一个字段,但随着我们向系统添加function,将来肯定会获得更多。 序列化过程将用于将实例传递给WCF服务,以及用于从/向文件读取/写入它。 当然,如果我不断用额外的字段更新类,后者可能是一个大问题。 幸运的是,我认为我已经通过在构造函数中的字段设置器周围添加了一个try / catch块来解决了这个问题,我也将对添加到类中的任何其他字段执行此操作。 /// /// Represents launch options supplied to an executable. /// [Serializable] public sealed class ExecutableLaunchOptions : ISerializable { /// /// Creates a new set of executable launch options. /// public ExecutableLaunchOptions() { } /// /// Creates a new set of executable launch options via deserialization. /// /// the […]

C#XML序列化/反序列化

我是C#的新手。 我正在上课,我们的一个例子不会编译。 Visual Studio 2010给出了这个错误:XML文档中存在错误(3,2)。 我应该如何编辑XML文件以使其与代码一起使用? 谢谢您的帮助! public class SerializeIn { public static void Main() { // Declarations. Person[] p = new Person[0]; string infile = “Persons.xml”; StreamReader sr = new StreamReader(infile); XmlSerializer xs = new XmlSerializer(p.GetType()); // Deserialize Person object from disc. p = (Person[])(xs.Deserialize(sr)); // Close StreamReader object to be safe. sr.Close(); // […]

如何二进制序列化程序自定义类

我有这个自定义类: public class MyClass { private byte byteValue; private int intValue; private MyClass myClass1= null; private MyClass myClass2 = null; } 显然我也有构造函数和get / set方法。 在我的主窗体中,我初始化了很多MyClass对象(请注意,在MyClass对象中,我引用了其他2个MyClass对象)。 初始化后,我遍历第一个MyClass项,调用它为例如“root”。 所以,例如我做的事情如下: MyClass myClassTest = root.getMyClass1(); MyClass myClassTest2 = myClassTest.getMyClass1(); 等等。 不,我想存储在二进制文件中,实例化所有MyClass对象,以便在软件重启后再次获取它们。 我完全不知道如何做到这一点,有人可以帮助我吗? 谢谢。

C#反序列化xml文件

我尝试反序列化xml文件: 我的反序列化类代码看起来像这样: [Serializable] [XmlRoot(“XmlFile”)] public class SerializeObject { [XmlAttribute(“ITEM”)] public string Item { get; set; } [XmlAttribute(“TABLE_NAME”)] public string Table_Name { get; set; } } 当我尝试反序列化xml文件时,我总是没有错误,而Item和Table_Name等于null。 为什么? 重播的Thx

反序列化json树结构和设置父项

这似乎是一个非常基本的问题,但我很想找到一个优雅的解决方案。 我有一个Node类,我用它来构建树结构。 然后使用JsonConvert.SerializeObject(..)将其序列化为JSON。 为了防止在序列化时循环引用,我在Parent属性上放置了一个JsonIgnore属性。 这显然意味着父级未被序列化为生成的JSON输出中的每个节点的一部分。 当我反序列化相同的JSON字符串时,我希望Node对象分配正确的Parent,以便我可以轻松地向上遍历树。 实现这一目标的最简洁最简单的方法是什么? [JsonObject] public class Node : IEnumerable { public Guid Id { get; set; } public string Name { get; set; } [JsonIgnore] public Node Parent { get; private set; } [JsonProperty(“Children”)] private readonly Dictionary _children = new Dictionary(); public Node() { Id = Guid.NewGuid(); } public void Add(Node […]

为什么我不能使用Json.Net反序列化这个自定义结构?

我有一个表示DateTime的结构,它也有如下区域信息: public struct DateTimeWithZone { private readonly DateTime _utcDateTime; private readonly TimeZoneInfo _timeZone; public DateTimeWithZone(DateTime dateTime, TimeZoneInfo timeZone, DateTimeKind kind = DateTimeKind.Utc) { dateTime = DateTime.SpecifyKind(dateTime, kind); _utcDateTime = dateTime.Kind != DateTimeKind.Utc ? TimeZoneInfo.ConvertTimeToUtc(dateTime, timeZone) : dateTime; _timeZone = timeZone; } public DateTime UniversalTime { get { return _utcDateTime; } } public TimeZoneInfo TimeZone { […]