C# >你能试试下面的代码并告诉我们问题是什么吗?这是工作代码,您可以将其粘贴到控制台或winforms应用程序的Program.cs文件中并进行调试
请注意以下事项:C# >你能试试下面的代码并告诉我们问题是什么吗?这是工作代码,您可以将其粘贴到控制台或winforms应用程序的Program.cs文件中并进行调试,c#,.net,serialization,C#,.net,Serialization,请注意以下事项: 我消除了dict字段的静态性 我修复了用于添加的两个元素的键(不能都是21) 我重命名了一个MyClass类,并修复了对MyClass1的引用 我稍微重写了主代码,使用使用块,而不是调用.Close()和.Dispose() 代码如下: using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization; using System.Runtim
- 我消除了dict字段的静态性
- 我修复了用于添加的两个元素的键(不能都是21)
- 我重命名了一个MyClass类,并修复了对MyClass1的引用
- 我稍微重写了主代码,使用
使用
块,而不是调用
和.Close()
.Dispose()
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace Test
{
[Serializable]
public class MyClass : ISerializable
{
internal Dictionary<long, string> dict = new Dictionary<long, string>();
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("static.dic", dict, typeof(Dictionary<long, string>));
}
public MyClass(SerializationInfo info, StreamingContext context)
{
dict = (Dictionary<long, string>)info.GetValue("static.dic",
typeof(Dictionary<long, string>));
}
public void Add()
{
dict.Add(31, "11");
}
public MyClass()
{
dict.Add(21, "11");
}
}
public class MyClassTest
{
public static void Main()
{
MyClass myClass = new MyClass();
myClass.Add();
using (FileStream fileStream = new FileStream("test.binary", FileMode.Create))
{
IFormatter bf = new BinaryFormatter();
bf.Serialize(fileStream, myClass);
}
using (FileStream fileStream = new FileStream("test.binary", FileMode.Open))
{
IFormatter bf = new BinaryFormatter();
myClass = (MyClass)bf.Deserialize(fileStream);
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.IO;
使用System.Runtime.Serialization;
使用System.Runtime.Serialization.Formatters.Binary;
名称空间测试
{
[可序列化]
公共类MyClass:ISerializable
{
内部字典dict=新字典();
public void GetObjectData(SerializationInfo信息、StreamingContext上下文)
{
信息附加值(“static.dic”,dict,typeof(Dictionary));
}
公共MyClass(SerializationInfo信息、StreamingContext上下文)
{
dict=(Dictionary)info.GetValue(“static.dic”,
类型(字典);
}
公共无效添加()
{
补充(31,“11”);
}
公共MyClass()
{
添加(21,“11”);
}
}
公共类MyClassTest
{
公共静态void Main()
{
MyClass MyClass=新的MyClass();
myClass.Add();
使用(FileStream FileStream=newfilestream(“test.binary”,FileMode.Create))
{
IFormatter bf=新的二进制格式化程序();
序列化(文件流,myClass);
}
使用(FileStream FileStream=newfilestream(“test.binary”,FileMode.Open))
{
IFormatter bf=新的二进制格式化程序();
myClass=(myClass)bf.反序列化(fileStream);
}
}
}
}
您不想为此使用静态类。您希望使用在第一次创建时加载的单例。您可能还需要一个刷新方法。您不想为此使用静态类。您希望使用在第一次创建时加载的单例。您可能还需要一个刷新方法。您的代码看起来几乎完成,但无法编译。帮每个人一个忙,先把它变成一个(简短的)工作程序,然后再发布。你的代码看起来几乎完成了,但无法编译。帮每个人一个忙,先把它变成一个(简短的)工作程序,然后把它发布到.thnx上,等待你的回复。我使用的是静态字典bcoz,因为我的字典可以容纳20000个值,所以如果我的类下次被初始化,我不想再次调用我的sp。我还想在用户试图保存新条目时将新条目添加到字典中。我知道序列化静态对象是一种缺陷设计,但在这种情况下,我必须将dict声明为静态对象,否则将产生巨大的perofmance开销。lasse你的代码可以工作,但是你能告诉我当ym构造函数被调用时dict的y count返回零吗?(反序列化时)lasse,有没有什么方法可以同时实现基本和混合序列化,bcoz我只需要dictionay来实现自定义,而类的其他成员可以以基本/正常的方式序列化。thnx供你回复。我使用的是静态字典bcoz,因为我的字典可以容纳20000个值,所以如果我的类下次被初始化,我不想再次调用我的sp。我还想在用户试图保存新条目时将新条目添加到字典中。我知道序列化静态对象是一种缺陷设计,但在这种情况下,我必须将dict声明为静态对象,否则将产生巨大的perofmance开销。lasse你的代码可以工作,但是你能告诉我当ym构造函数被调用时,dict的y count返回零吗?(反序列化时)lasse,有没有什么方法可以同时实现基本序列化和混合序列化,因为我只需要dictionay来实现自定义,而类的其他成员可以以基本/正常的方式序列化。
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace Test
{
[Serializable]
public class MyClass : ISerializable
{
internal Dictionary<long, string> dict = new Dictionary<long, string>();
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("static.dic", dict, typeof(Dictionary<long, string>));
}
public MyClass(SerializationInfo info, StreamingContext context)
{
dict = (Dictionary<long, string>)info.GetValue("static.dic",
typeof(Dictionary<long, string>));
}
public void Add()
{
dict.Add(31, "11");
}
public MyClass()
{
dict.Add(21, "11");
}
}
public class MyClassTest
{
public static void Main()
{
MyClass myClass = new MyClass();
myClass.Add();
using (FileStream fileStream = new FileStream("test.binary", FileMode.Create))
{
IFormatter bf = new BinaryFormatter();
bf.Serialize(fileStream, myClass);
}
using (FileStream fileStream = new FileStream("test.binary", FileMode.Open))
{
IFormatter bf = new BinaryFormatter();
myClass = (MyClass)bf.Deserialize(fileStream);
}
}
}
}