首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#:在注册表中存储.Net对象

在C#中,可以使用注册表来存储.Net对象。以下是一个简单的示例,演示如何在注册表中存储和检索.Net对象:

  1. 首先,创建一个自定义类,该类将用于存储和检索对象。
代码语言:csharp
复制
using System;

[Serializable]
public class CustomObject
{
    public string Name { get; set; }
    public int Age { get; set; }
}
  1. 接下来,创建一个方法来将对象存储在注册表中。
代码语言:csharp
复制
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using Microsoft.Win32;

public static void SaveObjectToRegistry(string keyName, object obj)
{
    using (var ms = new MemoryStream())
    {
        var bf = new BinaryFormatter();
        bf.Serialize(ms, obj);
        var objBytes = ms.ToArray();
        Registry.CurrentUser.CreateSubKey(keyName).SetValue("CustomObject", objBytes);
    }
}
  1. 最后,创建一个方法来从注册表中检索对象。
代码语言:csharp
复制
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using Microsoft.Win32;

public static object GetObjectFromRegistry(string keyName)
{
    var key = Registry.CurrentUser.OpenSubKey(keyName);
    if (key == null)
    {
        return null;
    }

    var objBytes = key.GetValue("CustomObject") as byte[];
    if (objBytes == null)
    {
        return null;
    }

    using (var ms = new MemoryStream(objBytes))
    {
        var bf = new BinaryFormatter();
        return bf.Deserialize(ms);
    }
}

现在,您可以使用这些方法将.Net对象存储在注册表中,并在需要时检索它们。例如:

代码语言:csharp
复制
var customObject = new CustomObject { Name = "John", Age = 30 };
SaveObjectToRegistry(@"Software\MyApp", customObject);

var retrievedObject = GetObjectFromRegistry(@"Software\MyApp") as CustomObject;
if (retrievedObject != null)
{
    Console.WriteLine($"Name: {retrievedObject.Name}, Age: {retrievedObject.Age}");
}

请注意,这些方法仅适用于存储和检索.Net对象。如果您需要存储其他类型的数据,您可能需要使用其他方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Cookie存储对象

https://blog.csdn.net/huyuyang6688/article/details/46955119 背景介绍 ---- 做项目过程,用户登陆之后,需要将用户的信息存到Cookie...,但因为Cookie只能存储字符串,所以想到了先把用户实体序列化成Json串,存储Cookie,用到的时候再拿出来反序列化。...(我的开发环境为VS2012,.net framework版本为4.0,) C#Json与对象之间的互相转换 ---- 下载并引用Newtonsoft.Json.dll 定义一个简单的用户实体: public...Cookie时会产生乱码,为了防止产生乱码,我们存入Cookie之前先用UrlEncode()和UrlDecode()对Json串进行编码与解码。...而且,一般的浏览器支持的Cookie存储的容量为4k(差也就差一两个字节),足够存储一个经过序列化的对象了。

3.7K40

.NET调用存储过程

因为做项目要用到数据库,因此存储过程是必不可少的,看了一点如何在.NET调用存储过程的资料,颇有点心得,觉得这个东西是当用到数据库的时候必须要会的一项技术。...下面是它的定义: 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。...存储过程是数据库的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。....NET调用存储过程。...VS2005里面新建一个控制台程序,新建一个方法如下: public void nopara() { SqlConnection con = new SqlConnection

2.2K10
  • .NET警惕C#的is var写法

    F2={f2}"); } 答案是控制台居然输出居然进来了,也就是说 null is 判断里面是通过,而 var 的含义似乎不只是一个语法上的可有可无的关键词而已,而是赋予了运行时含义的关键词 换句话说就是以上代码里面的...最初的 C# 里面的 var 只是一个构建过程可以被平替为具体类型的关键词,是一个不会影响到语义、运行时逻辑的语法而已。...整个 C# 语言的设计是不断迭代的,现在已经是 C# 12 了。在当年 C# 7.0 时候引入了 pattern 写法时,大家都为此开森,因为这个语法写起来特别漂亮。...语法里面的模式匹配的语法,两者应该都有相同的设计 更何况在过滤空对象时,还可以使用 is {} 语法,这就导致了如果将 is var 设计为过滤 null 对象,将会和 is {} 语法是重叠的,浪费关键词...为了能够更好的实现比较长的链路短写法,于是就如官方文档所述将 var 匹配当成为对一切的匹配,包含 null 对象的匹配 换句话说使用 var 匹配就相当于只是拿出来一个变量而已,而不会做其他任何的处理逻辑

    13110

    C#的深复制和浅复制(C#克隆对象

    C# 支持两种类型:“值类型”和“引用类型”。  值类型(Value Type)(如 char、int 和 float)、枚举类型和结构类型。 ...以它们计算机内存如何分配来划分 值类型与引用类型的区别? 1,值类型的变量直接包含其数据, 2,引用类型的变量则存储对象引用。...值类型隐式继承自System.ValueType  所以不能显示让一个结构继承一个类,C#不支持多继承 堆栈(stack)是一种先进先出的数据结构,在内存,变量会被分配在堆栈上来进行操作。...堆(heap)是用于为类型实例(对象)分配空间的内存区域,堆上创建一个对象, 会将对象的地址传给堆栈上的变量(反过来叫变量指向此对象,或者变量引用此对象)。...改变目标对象引用类型字段的值它将反映到原始对象,因为拷贝的是指向堆是上的一个地址 深拷贝:深拷贝与浅拷贝不同的是对于引用字段的处理,深拷贝将会在新对象创建一个新的对象和         原始对象对应字段相同

    67910

    对象 .NET (Core)的应用: 设计篇

    DefaultObjectPool之所有使用一个数组附加一个单一对象存储池化对象,是因为针对单一字段的读写比针对数组元素的读写具有更好的性能。...如果池化对象的使用率不高,基本上使用的都会是该字段存储对象,那么此时的性能是最高的。...ASP.NET应用,我们基本上都会采用依赖注入的方式利用注入的ObjectPoolProvider对象来创建针对具体类型的对象池。...我们《编程篇》还演示了另一种创建对象池的方式,那就是直接调用ObjectPool类型的静态Create方法,该方法的实现体现在如下所示的代码片段。...对象 .NET (Core)的应用[1]: 编程篇 对象 .NET (Core)的应用[2]: 设计篇 对象 .NET (Core)的应用[3]: 扩展篇

    1.5K30

    对象 .NET (Core)的应用: 扩展篇

    原则上所有的引用类型对象都可以通过对象池来提供,但是具体的应用需要权衡是否值得用。虽然对象池能够通过对象复用的方式避免GC,但是它存储对象会耗用内存,如果对象复用的频率很小,使用对象池是不值的。...总之,我们使用之前得考虑当前场景是否适用对象池,使用的时候严格按照“有借有还”、“不用才还”的原则。...类型定义了两个字段,_initCapacity字段表示列表创建时指定的初始容量,另一个_maxCapacity则表示对象存储列表的最大容量。...实现的Create方法,我们利用初始容量创建出List对象Return方法,我们先将待回归的列表清空,然后根据其当前容量决定是否要将其释放到对象池。...池化的数组并未直接存储对象池中,长度接近的多个数组会被封装成一个桶(Bucket),这样的好处是执行Rent方法的时候可以根据指定的长度快速找到最为匹配的数组(大于并接近指定的长度)。

    1.6K10

    .NET 创建对象的几种方式的对比

    .net ,创建一个对象最简单的方法是直接使用 new (), 实际的项目中,我们可能还会用到反射的方法来创建对象,如果你看过 Microsoft.Extensions.DependencyInjection...的源码,你会发现,为了保证不同场景的兼容性和性能,内部使用了多种反射机制。...使用 Activator.CreateInstance 如果你需要创建对象的话,.NET Framework 和 .NET Core 中正好有一个专门为此设计的静态类,System.Activator...NET Core 很熟悉的 IOC 容器,Microsoft.Extensions.DependencyInjection,把类型注册到容器后,然后我们使用 IServiceProvider 来获取对象...这里简单对比了几种创建对象的方法,测试的结果也可能不是特别准确,有兴趣的还可以 .net framework 上面进行测试,希望对您有用!

    2.2K30

    C# .NET面试系列二:面向对象

    C#,class 和 struct 是用于定义自定义类型的两种不同的关键字,它们有一些重要的区别:内存分配:class 是引用类型,它在堆上分配内存。对象的实例是通过引用访问的。... .Net 中所有可序列化的类都被标记为_?.NET,所有可序列化的类都应该被标记为 Serializable 特性。...序列化的过程,类的成员变量将被转换为可传输或可存储的格式。 请注意,不是所有的类都需要进行序列化。...C#,property(属性)和 attribute(属性)是两个不同的概念,它们分别用于不同的目的。...能用 foreach 遍历访问的对象需要实现 接口或声明方法的类型C#,foreach 循环用于迭代可枚举集合的元素。

    22910

    .NET Remoting 体系结构 之 远程方法传递对象

    为了阐明类的编组问题,我们将把远程对象改为向客户端发送一个对象:MySerialized 类将按 值编组。方法,消息被写入控制台中,以便验证调用是客户端上进行还是服务器上进行。...安全性和序列化的对象 .NETRemoting 和ASP.NET Web 服务的一个重要区别是对象编组的方式。 ASP.NET Web 服务,只有公共字段和属性通过网络传输。...而.NET Remoting 使用另一种序列化机制来序列化所有数据,包括所有私有数据。恶意客户端可以序列化和反序列化阶段破坏应用程序。...低级反序列化,不能传递 ObjRef 对象,也不能传递实现ISponsor 接口的对象。为了传递这两类对象,可以把反序列化级别改为完整级别。... C#,有相似的特性:ref 和 out 方法参数。ref 和 out 方法参数可以用于可序列化的值类型和引用类型。

    1.1K20

    C#之玩转ASP.NET的内置对象

    ASP.NET的内置对象 ASP.NET的内置对象 使用Response页面跳转传值 使用request对象获取客户端信息 Application对象 Session对象 Cookie对象 Server...,为了避免每一次更新时多用户更新冲突更新前后加上执行加锁和解锁的动作 Application.Lock(); Application.UnLock(); Session对象 Session对象用于将特定的用户信息存储服务器内存...数据信息是以文本的形式保存在计算机,客户端每一次请求过程中都会携带Cookie信息并将其发送到服务器,这就产生了隐患。...Cookie对象与Session对象的使用场景选择 实际应用向客户端写入Cookie数据时都会设置Cookie的过期时间,Cookie对象和Session对象具有相同的功能,两者区别在于Cookie...是存储客户端的,而Session对象存储服务器端的,相对来讲Session比Cookie安全,但同时也带来了服务器的资源压力。

    1K20

    C# .NET 的缓存实现

    C# .NET 的缓存实现 软件开发中最常用的模式之一是缓存。这是一个简单但非常有效的概念,这个想法的核心是记录过程数据,重用操作结果。当执行繁重的操作时,我们会将结果保存在我们的缓存容器。...它可以很容易地注入[3]到 Asp .NET Core 的依赖注入机制。...这篇博文与此无关,但您可以阅读我的文章 C# .NET 查找、修复和避免内存泄漏:8 个最佳实践[4]以了解一些有用的方法。 第二个问题更容易解决。...例如,如果我们正在等待获取 Alex 的 Avatar,我们仍然可以另一个线程上获取 John 或 Sarah 的缓存值。 字典_locks存储了所有的锁。...view=aspnetcore-2.2#using-imemorycache [4] C# .NET 查找、修复和避免内存泄漏:8 个最佳实践: https://michaelscodingspot.com

    3.8K40

    控制流存储数据

    如果做得好,将存储在数据的程序状态存储控制流,可以使程序比其他方式更清晰、更易于维护。 在说更多之前,重要的是要注意并发性不是并行性。...不管名称如何,这篇文章的基本观点是,根据多个独立执行的控制流编写程序,允许您将程序状态存储一个或多个控制流的执行状态,特别是程序计数器(该部分正在执行的行)和堆栈上。...这是一个看似微不足道的问题,它演示了控制流存储程序状态意味着什么。假设我们正在从文件读取字符,并希望扫描 C 样式的双引号字符串。在这种情况下,我们有一个非并行程序。...这个程序如此不透明的主要原因是它的程序状态被存储为数据,特别是名为 state 的变量。当可以代码存储状态时,这通常会导致程序更清晰。...在这些情况下,调用方一次传递一个字节的输入序列意味着模拟原始控制流的数据结构显式显示所有状态。 并发性消除了程序不同部分之间的争用,这些部分可以控制流存储状态,因为现在可以有多个控制流。

    2.3K31
    领券