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

使自定义.NET异常可序列化的正确方法是什么?

使自定义.NET异常可序列化的正确方法是在.NET类中实现ISerializable接口,如下所示:

代码语言:csharp
复制
using System.Runtime.Serialization;

public class CustomException : Exception, ISerializable
{
    private string message;

    public CustomException(string message) : base(message)
    {
        this.message = message;
    }

    public CustomException(string message, Exception innerException) : base(message, innerException)
    {
        this.message = message;
    }

    protected CustomException(SerializationInfo info, StreamingContext context) : base(info, context)
    {
        message = info.GetString("Message");
    }

    public string Message
    {
        get { return message; }
        set { message = value; }
    }

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        if (info == null) throw new ArgumentNullException("info");
        info.AddValue("Message", message);
        base.GetObjectData(info, context);
    }
}

在实现自定义异常时需要确保异常具有描述性,否则在序列化时不推荐自定义异常。另外,自定义异常应该被标记为ISerializable,以允许程序在序列化或反序列化自定义异常时使用自定义元数据(即objectData)。

ISerializable方法:GetObjectDataGetConstructor必须被实现。GetObjectData方法会调用基类的GetObjectData方法,并传递自定义元数据作为参数,同时GetConstructor方法会返回一个创建该类型的新实例的构造方法。

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

相关·内容

Java面试题1:Java基础篇

使⽤ clone() ⽅法; 4、反序列化,⽐如调⽤ ObjectInputStream 类 readObject() ⽅法。...对于 short s1 = 1; s1 += 1; 来说,+= 是 Java 语⾔规定运算符,Java 编译器会对它进⾏特殊处理,因此可以正确 编译。...因为在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接舍弃 ——————————————————————————————————————————————— 21、两个⼆进制数或结果是什么...答: 两个⼆进制数或结果是这两个⼆进制数差绝对值。表达式如下:a^b = |a-b|。 两个⼆进制 a 与 b 或,即 a 和 b 两个数按位进⾏运算。...序列化实现:将需要被序列化类实现 Serializable 接⼝,该接⼝没有需要实现⽅法,只是⽤于标注该对象是 可被序列化,然后使⽤⼀个输出流(如:FileOutputStream)来构造⼀个

5710

如何正确实现一个自定义 Exception

使常可序列化。 异常必须可序列化才能跨越应用程序域和远程处理边界正确工作。 一定要在所有异常上都提供(至少是这样)下列常见构造函数。...正确方式 我们还是按照微软 guideline 进行编写,但是在序列化构造器上调用 base 构造器。并且 override 基类 GetObjectData 方法。...调用 base 构造可以确保基类 Message 字段被正确还原。这里与其说是序列化构造器不如说是反序列化构造器,因为这个构造器会在反序列化恢复成对象时候被调用。...记住不要忘记调用 base.GetObjectData(info, context), 确保基类字段数据能正确序列化。...在序列化构造器对字段值进行恢复,不要忘记调用基类序列化构造器 重写 GetObjectData 方法,把需要序列化字段添加到 SerializationInfo 对象上,同样不要忘记调用基类

14620

苏州同程旅游学长给我全面的面试知识库

作为ref传递参数必须在传递给方法之前进行初始化,而out参数在传递给方法之前无需进行初始化。 10、C#中“ using”语句用途是什么?...11、什么是序列化? 当我们想通过网络传输对象时,我们必须将对象转换为字节流。将对象转换为字节流过程称为序列化。为了使对象可序列化,它应该实现ISerialize接口。...反序列化是从字节流中创建对象反向过程。 12、我们可以在静态方法中使用“ this”命令吗? 我们不能在静态方法中使用’This’,因为我们只能在静态方法中使用静态变量/方法。...29、 C#.NET泛型是什么? 泛型用于制作可重用代码类,以减少代码冗余,提高类型安全性和性能。使用泛型,我们可以创建集合类。...公共类DerivedClass:BaseClass 35、.net基类是什么,所有类都源自该基类? System.Object 36、方法重载和方法重载之间有什么区别?

3K20

通过避免下列 10 个常见 ASP.NET 缺陷使网站平稳运行

图 2 说明动态加载用户控件以及转换返回控件引用正确方法。...首先,定义一个自定义页适配器,其 GetStatePersister 方法返回 .NET Framework SessionPageStatePersister 类一个实例: public class...但是 _count 却没有经过序列化和反序列化,因为它是私有的,而且默认情况下 ASP.NET 配置文件管理器使用 XML 序列化自定义类型进行序列化和反序列化。XML 序列化程序将忽略非公共成员。...因此,会对 Posts 实例进行序列化和反序列化,但是每次反序列化类实例时,_count 都会重设为 0。 一种解决方案是使 _count 成为公共字段而非私有字段。...您应该牢记一点是,如果您使用自定义数据类型作为配置文件属性,并且该数据类型具有必须序列化才能完全序列化类型实例非公共数据成员,则在属性声明中使用 serializeAs="Binary" 属性并确保类型本身是可序列化

3.5K80

框架设计原则和规范(三)

>类型,而不要使用自定义委托 .NET框架中泛型委托定义: public delegate void Action() public delegate void Action(T1...更容易使错误处理代码局部化。如果使用返回值,几乎每一行功能性代码都要有一个if语句。...不要在正常控制流中使用异常,如果能够避免的话 2.1.5. 考虑抛出异常可能对性能造成影响 每秒抛出100个异常可能会影响性能 2.1.6....避免太深继承层次 2.4.3. 要在命名异常类时使用“Exception”后缀 2.4.4. 要使异常可序列化。为了使异常能够在跨应用程序域和跨远程边界时仍能正常使用,这样做是必须 2.4.5....public Someexception(string message); public SomeException(string message, Exception inner); //序列化所需方法

97260

Codable 自定义解析 JSON

修改 Key 让我们从一种基本方式开始,我们可以通过修改用作序列化表示形式一部分键来自定义类型编码和解码方式。...,同时仍使我们能够更改将用于序列化名称。...创建匹配结构 到目前为止,我们只是在调整类型编码键——尽管这样做通常可以使您受益匪浅,但有时我们需要对Codable自定义进行进一步调整。...尽管拥有正确序列化代码很重要,但是拥有适合我们实际代码库模型结构也同样重要。 相反,让我们创建一个新专用类型——它将在JSON数据中使用格式与Swift代码结构体之间架起一座桥梁。...例如,我们要解码JSON数据可能使用字符串来表示整数或其他类型数字。 让我们来看看一种可以让我们处理这些值方法,再次以一种自包含方式,它不需要我们编写完全自定义Codable实现。

1.9K20

Java集合容器面试题(2020最新版)

遍历一个 List 有哪些不同方式?每种方法实现原理是什么?Java 中 List 遍历最佳实践是什么? 说一下 ArrayList 优缺点 如何实现数组和 List 之间转换?...每种方法实现原理是什么?Java 中 List 遍历最佳实践是什么? 遍历方式有以下几种: for 循环遍历,基于计数器。...() 方法序列化 ArrayList 中非 transient 元素,然后遍历 elementData,只序列化已存入元素,这样既加快了序列化速度,又减小了序列化之后文件大小。...用户自定义 Key 类最佳实践是使之为不可变,这样 hashCode() 值可以被缓存起来,拥有更好性能。...(Object obj1, Object obj2)方法用来排序 一般我们需要对一个集合使用自定义排序时,我们就要重写compareTo方法或compare方法,当我们需要对某一个集合实现两种排序方式,

1.2K20

程序员级别鉴定书(.NET面试问答集锦)

因为同样一个名称文件可能有不同版本和区域,此时单独靠文件名称,可能会造成不能确定程序集正确性。 Assembly.Load("foo.dll")加载程序集方法是否正确?...XmlSerializer是将对象属性和字段进行序列化和反序列化序列化成为xml数据,反序列化再将xml转换成对象。应该至少需要ACL权限中读权限。...引用类型 XmlSerializer所使用“PropertySpecified”模式意义是什么?它试图要解决什么问题? 把不参与序列化对象标注出来,只序列化有用数据,而不是序列化整个对象。...解释virtual, sealed, override, 和 abstract关键字 virtual:virtual 关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。...提供避免元素命名冲突方法 DOM适合使用场景是什么?是否有尺寸限制? DOM是一种与浏览器,平台,语言无关接口,使你可以访问页面其他标准组件。

1.7K70

FastAPI(46)- JSONResponse

将使用 JSONResponse 返回响应 但是可以直接从路径操作函数中返回自定义 JSONResponse 返回响应数据常见方式(基础版) https://www.cnblogs.com/poloyy...str title: Optional[str] = None @app.post("/item") async def get_item(item: Item): # 打印看看传进来数据是什么...__name__} ' TypeError: Object of type Item is not JSON serializable 类型错误:项目类型对象不是 JSON 可序列化 因为它无法转换为...JSON 数据,所以报错了 看看 JSONResponse 源码 会调用 json.dumps() 方法 看看 Response 源码 看到其实可以自定义 status_code、headers、...jsonable_encoder(item) return JSONResponse(content=json_item, status_code=status.HTTP_201_CREATED) 正确传参请求结果

1.2K10

MongoDB学习(翻译5)

默认序列化器也内建了对.NET数据类型(原始类型、数组、集合、字典等)支持。 序列化一个类对象之前,该类映射必须存在,可以手动创建类映射也可以简单通过自动映射来创建。...FirstName 相关,使构造函数第二个参数和LastName 属性相关。...由上面我们已经了解到,除了预定约定(约束),你可以自定义自己约定(约束)。有4个可以让我们创建和注册自定义约定类,运行在不同(阶段)级别。...约定在他们注册每个阶段顺序运行,默认约定会先注册,这就允许任何用户注册约定覆盖掉默认约定。所以某些值可能得到应用和覆写,这就要求用户确保注册顺序正确性。...注意: 如果一个IPostProcessingConvention 自定义实现注册早于一个IClassMapConvention自定义实现,那么IClassMapConvention 先运行,因为它是运行类阶段是早于后处理阶段

45820

最常用两种C++序列化方案使用心得(protobuf和boost serialization)

C++对象序列化四种方法 4. 最常用两种序列化方案使用心得 正文 1. 什么是序列化?...因此,所有从 CObject 派生类都可利用 CObject 序列化协议。 MSDN中介绍 3.4 .Net Framework .NET运行时环境用来支持用户定义类型流化机制。...3.5 简单总结 这几种序列化方案各有优缺点,各有自己适用场景。其中MFC和.Net框架方法适用范围很窄,只适用于Windows下,且.Net框架方法还需要.Net运行环境。...最常用两种序列化方案使用心得 关于这两种方案具体使用和示例没什么好写,因为优秀参考资料很多,请看后面给出相关参考资料,这里只给出我使用时一些心得,方便大家在选择序列化方案时有个正确参考,...(3)protobuf嵌套后会改变类名称 protobuf支持类嵌套,即在一个自定义类型中可以定义另一个自定义类型,但注意嵌套自定义类型在经过protobuf处理后生成类名称并不是你定义类名称

6.8K42

BugKu-WEB-3

23897是什么,试着传参了一下,看到了代码,看来思路是对。 image.png image.png 查阅代码,unserialize映入眼帘。...这就是反序列化函数,说明这题考是无类php反序列化。(问:有类是什么样子?...当用户名不是admin时候,首先把用户名密码放入数组,传到login方法中。login方法对传入数组进行了序列化,并且使用aes-128-cbc对序列化进行加密。iv(初始化向量)是随机生成。...或特性: 解密得出明文步骤使用了或运算,而异或运算有个特性,是可以自定义或结果。 这里讲解借用到大佬文章讲解思路。...这是因为我们修改了密文1中数据,使第一次解密出明文数据错乱,打乱了序列化数据格式,反序列化失败。

84840

面霸篇:Java 核心集合容器全解(核心卷二)

每次序列化时,先调用 defaultWriteObject()方法序列化 ArrayList中非 transient元素,然后遍历 elementData,只序列化已存入元素,这样既加快了序列化速度...0 : (h = key.hashCode()) ^ (h >>> 16);// 与自己右移16位进行或运算(高低位或) } HashMap put 方法具体流程?...当我们 put 时候,首先计算 keyhash值,这里调用了 hash方法,hash方法实际是让key.hashCode()与key.hashCode()>>>16进行或操作,高 16bit 补...用户自定义 Key 类最佳实践是使之为不可变,这样 hashCode() 值可以被缓存起来,拥有更好性能。...正确写法: //利用computeIfAbsent()方法来实例化LongAdder,然后利用LongAdder来进行线程安全计数 freqs.computeIfAbsent(key, k -> new

35021

Java异常面试题(2020最新版)

传递异常可以在方法签名处使用 throws 关键字声明可能会抛出异常。 ...对于非稳定代码catch尽可能进行区分异常类型,再做对应异常处理。 说明:对大段代码进行try-catch,使程序无法根据不同异常做出正确应激反应,也不利于定位问题,这是一种不负责任表现。...二方包在类冲突时,仲裁机制可能导致引入非预期版本使方法签名不匹配,或者在字节码修改框架(比如:ASM)动态创建或修改类时,修改了相应方法签名。...即使被调用方法返回空集合或者空对象,对调用者来说,也并非高枕无忧,必须考虑到远程调用失败、序列化失败、运行时异常等场景返回null情况。 ...2)如果不加栈信息,只是new自定义异常,加入自己理解error message,对于调用端解决问题帮助不会太多。如果加了栈信息,在频繁调用出错情况下,数据序列化和传输性能损耗也是问题。

75030

3分钟快速阅读-《Effective Java》(七)

简单来说对于异常可能出现情况进行尽可能声明,这样让调用你的人才能知道要怎么来使用对应方法 63.在细节消息中包含能捕获失败信息 简单来说,对于可能出现业务逻辑异常处应当做好对应日志记录...74.1 实现Serializable接口,一旦这个类被发布了,就降低了改变这个类实现灵活性 74.2 增加了出现Bug和安全漏洞可能性 74.3 增加了测试负担 75.考虑使用自定义序列化 public...System.out.println("4 read resolve start"); return PersonSingleton.getInstance();//不管序列化操作是什么...{"CLIMB","READ","SONG"}; 正确做法 enum HOBBIES{ CLIMB,READ,SONG } 78.考虑使用序列化代理模式 代码示例...反序列化时, 会调用PersonProxyreadResolve()方法生成一个Person对象, * 最后返回此对象拷贝 (通过PersonProxy类readResolve方法

35210

金三银四面试:C#.NET面试题中高级篇3,含答案解析

6.在.NET委托是什么? 7.在.NET中可以自定义委托吗? 8 .NET默认委托类型有哪几种? 9.什么是泛型委托? 10. 什么是匿名方法?...当一个不正确类型转换发生时,会产生InvalidCastException异常,有时我们会用try-catch块做一些尝试性类型转换,这样代码没有任何错误,但是性能却相当糟糕,为什么呢?...在.NET中,通过Serializable特性提供了序列化对象实例机制,当一个类型被申明为Serializable后,它就能被诸如BinaryFormatter等实现了IFormatter接口类型进行序列化和反序列化...6.在.NET委托是什么?委托是寻址.NET版本。在C++中,函数指针只不过是一个指向内存位置指针,它不是类型安全。我们无法判断这个指针实际指向什么,像参数和返回类型等项久更无从知晓了。...而.NET委托完全不同,委托是类型安全类,它定义了返回类型和参数类型。委托类不仅包含对方法引用,也可以包含对多个方法引用。---->详解7.在.NET中可以自定义委托吗?

1.8K30

使用 ASP.NET Web API 构建超媒体 Web API

使用这个新方法后,服务器不仅仅返回数据。它返回数据和超媒体项目。超媒体项目为客户端提供了一种方法使它可以根据服务器应用程序工作流状态来确定可以在指定时间点执行操作集合。...格式化程序实现形式知道如何处理特定媒体类型,以及如何将它序列化或反序列化为具体 .NET 类型。过去在 ASP.NET MVC 中对新媒体类型支持十分有限。...此外,没有用于支持内容协商一致模型。您可以通过提供自定义 ActionResult 实现来支持响应消息不同媒体类型格式,但是它不清楚如何引入新媒体类型来反序列化请求消息。...利用具有新模型绑定程序或值提供程序模型绑定基础结构通常可以解决此问题。幸运是,这种不一致性在 ASP.NET Web API 中已通过引入格式化程序得到解决。...,重写方法 CanWriteType/WriteToStreamAsync 以支持将 .NET 类型序列化为指定媒体类型格式。

2.8K50
领券