
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
80 lines
2.2 KiB
Plaintext
80 lines
2.2 KiB
Plaintext
== Why is this an issue?
|
|
|
|
Serialization event handlers that don't have the correct signature will simply not be called, thus bypassing any attempts to augment the automated de/serialization.
|
|
|
|
|
|
This rule raises an issue when a method marked with one of the following attributes is ``++public++``, ``++static++``, does not return ``++void++``, has type parameters, or does not have a single parameter of type ``++System.Runtime.Serialization.StreamingContext++``:
|
|
|
|
* ``++System.Runtime.Serialization.OnSerializingAttribute++``
|
|
* ``++System.Runtime.Serialization.OnSerializedAttribute++``
|
|
* ``++System.Runtime.Serialization.OnDeserializingAttribute++``
|
|
* ``++System.Runtime.Serialization.OnDeserializedAttribute++``
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,csharp]
|
|
----
|
|
[Serializable]
|
|
public class Foo
|
|
{
|
|
[OnSerializing]
|
|
public void OnSerializing(StreamingContext context) {} // Noncompliant should be private
|
|
|
|
[OnSerialized]
|
|
int OnSerialized(StreamingContext context) {} // Noncompliant should return void
|
|
|
|
[OnDeserializing]
|
|
void OnDeserializing() {} // Noncompliant should have a single parameter of type StreamingContext
|
|
|
|
[OnSerializing]
|
|
public void OnSerializing2<T>(StreamingContext context) {} // Noncompliant should have no type parameters
|
|
|
|
[OnDeserialized]
|
|
void OnDeserialized(StreamingContext context, string str) {} // Noncompliant should have a single parameter of type StreamingContext
|
|
}
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
[source,csharp]
|
|
----
|
|
[Serializable]
|
|
public class Foo
|
|
{
|
|
[OnSerializing]
|
|
private void OnSerializing(StreamingContext context) {}
|
|
|
|
[OnSerialized]
|
|
private void OnSerialized(StreamingContext context) {}
|
|
|
|
[OnDeserializing]
|
|
private void OnDeserializing(StreamingContext context) {}
|
|
|
|
[OnDeserialized]
|
|
private void OnDeserialized(StreamingContext context) {}
|
|
}
|
|
----
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
=== Message
|
|
|
|
Make this method [non-public | non-static | return 'void' | have no type parameters | have a single parameter of type 'StreamingContext'].
|
|
|
|
|
|
include::../highlighting.adoc[]
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
include::../comments-and-links.adoc[]
|
|
endif::env-github,rspecator-view[]
|