mcl*_*dtk 7 .net c# serialization binaryformatter
我试图使用以下方法在.NET中序列化对象图:
public static byte[] Serialize(object data)
{
var binary = new BinaryFormatter();
using (var ms = new MemoryStream()) {
binary.Serialize(ms, data);
return ms.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我遇到以下错误:
FormatException: Input string was not in a correct format.
Stack Trace:
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
at System.Convert.ToInt32(Object value, IFormatProvider provider)
at System.Runtime.Serialization.Formatters.Binary.__BinaryWriter.WriteValue(InternalPrimitiveTypeE code, Object value)
at System.Runtime.Serialization.Formatters.Binary.__BinaryWriter.WriteMember(NameInfo memberNameInfo, NameInfo typeNameInfo, Object value)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteKnownValueClass(NameInfo memberNameInfo, NameInfo typeNameInfo, Object data)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteMembers(NameInfo memberNameInfo, NameInfo memberTypeNameInfo, Object memberData, WriteObjectInfo objectInfo, NameInfo typeNameInfo, WriteObjectInfo memberObjectInfo)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteMemberSetup(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo, String memberName, Type memberType, Object memberData, WriteObjectInfo memberObjectInfo)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo, String[] memberNames, Type[] memberTypes, Object[] memberData, WriteObjectInfo[] memberObjectInfos)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
Run Code Online (Sandbox Code Playgroud)
是否有一种直接的方法来识别哪个字段产生此错误?我可以递归地将对象图中的字段标记为NonSerialized以缩小潜在的罪魁祸首,但由于对象图非常广泛,这是繁琐的,似乎没有必要.
请注意,我不确定为什么BinaryFormatter无法序列化对象图中的一个或多个值.如果对象可以在运行时存储在内存中,则不清楚为什么它不能被序列化.这可能是枚举的问题吗?
使用Windbg.在这里下载(仅从安装程序中选择调试器.您不需要完整的SDK)并启动它.
然后使用File - Open Executable- 并启动它.您将在调试器中中断异常.如果没有在开始之前选择
Debug - Event Filters - CLR Exception - Enabled
Run Code Online (Sandbox Code Playgroud)
在每个托管异常上启用断点.然后你需要输入
.loadby sos clr
(if you are using .NET 3.5 .loadby sos mscorwks)
.prefer_dml 1
!dso
Run Code Online (Sandbox Code Playgroud)
这将为您提供一个列表,其中包含当前线程在失败之前使用的对象.然后单击其中一个带蓝色下划线的NameInfo实例,以查看序列化程序失败的成员变量.我同意它需要一些耐心来学习,但你可以在创纪录的时间调试这些东西,其他人需要在他们的代码中摆弄它来解决问题.您需要做的就是查看导致问题的NameInfo实例.
| 归档时间: |
|
| 查看次数: |
2090 次 |
| 最近记录: |