Is there a straightforward way to identify which field is producing this error? I could recursively mark the fields in the object graph as NonSerialized to narrow down potential culprits, but as the object graph is quite extensive, this is burdensome and seems unnecessary.

Note that I am not sure why the BinaryFormatter cannot serialize one or more values in the object graph. If the object can be stored in memory at runtime, it is not clear why it cannot be serialized. Could this be a problem with an enum?

网友答案:

Use Windbg. Download it here (select from the installer only the debugger. You do not need to downlad the complete SDK) and start it.

Then use File - Open Executable - and start it. You will break at the exception in the debugger. If not select before you start

Debug - Event Filters - CLR Exception - Enabled

to enable a breakpoint on every managed exception. Then you need to type

This will give you a list with the objects which were used by the current thread before it did fail. Then you click on one of the blue underlined NameInfo instances to see which at which member variable the serializer did fail. I agree that it requires some patience to learn but you can debug such stuff in record time where others need to fiddle around in their code to nail the issue. All you need to do is to look into the NameInfo instance which did cause the issue.

网友答案:

The way that I approached this was to serialize the object to a string and then write the string to a file. You can then look at the serialized string, see where it stopped, and infer from there which element it was that caused the problem.

网友答案:

Comment out all the properties, and serialize the object. Reintroduce them one at a time until the error returns.

This is basic debugging.

The stack trace gives hints though, if there aren't to many types being serialized.