序列化此类时遇到问题。我确保所有类组件类都是公共的,并确保每个类变量中都有非空值。我有什么理由不能将其序列化吗?
例外:
未处理的类型' System.InvalidOperationException'发生在System.Xml.dll中 附加信息:有一个错误反映了类型&Some39Space.TmpClass。
以下是代码:
public class TmpClass : ICloneable
{
public List<string> str_pattern { get; set; }
public int group { get; set; }
public double tp { get; set; }
public double sl { get; set; }
public int index { get; set; }
public int num { get; set; }
public string direction { get; set; }
public string open;
public string close;
public TmpClass ()
{
open= "NA";
close= "NA";
direction = "NA";
}
public Dictionary<string, SomeClass> stats = new Dictionary<string, SomeClass>();
// Serialize Data
public void Save(string fileName, string location)
{
string file = string.Concat(location, fileName);
using (var stream = new FileStream(file, FileMode.Create))
{
XmlSerializer XML = new XmlSerializer(typeof(TmpClass));
XML.Serialize(stream, this);
}
}
// Deserialize Data
public static TmpClass Load(string fileName, string location)
{
string file = string.Concat(location, fileName);
using (var stream = new FileStream(file, FileMode.Open))
{
XmlSerializer XML = new XmlSerializer(typeof(TmpClass));
return (TmpClass)XML.Deserialize(stream);
}
}
//
public object Clone()
{
return this.MemberwiseClone();
}
}
以下是例外:
String Index: 1
System.InvalidOperationException: There was an error reflecting type 'StringBui
lder.String'. ---> System.NotSupportedException: Cannot serialize member Patter
nBuilder.String.stats of type System.Collections.Generic.Dictionary`2[[System.S
tring, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e0
89],[StringBuilder.SomeClass, StringBuilder, Version=1.0.0.0, Cultu
re=neutral, PublicKeyToken=null]], because it implements IDictionary.
at System.Xml.Serialization.TypeScope.GetDefaultIndexer(Type type, String mem
berInfo)
at System.Xml.Serialization.TypeScope.GetCollectionElementType(Type type, Str
ing memberInfo)
at System.Xml.Serialization.TypeScope.ImportTypeDesc(Type type, MemberInfo me
mberInfo, Boolean directReference)
at System.Xml.Serialization.TypeScope.GetTypeDesc(Type type, MemberInfo sourc
e, Boolean directReference, Boolean throwOnError)
at System.Xml.Serialization.StructModel.GetFieldModel(FieldInfo fieldInfo)
at System.Xml.Serialization.StructModel.GetFieldModel(MemberInfo memberInfo)
at System.Xml.Serialization.XmlReflectionImporter.InitializeStructMembers(Str
uctMapping mapping, StructModel model, Boolean openModel, String typeName, Recur
sionLimiter limiter)
at System.Xml.Serialization.XmlReflectionImporter.ImportStructLikeMapping(Str
uctModel model, String ns, Boolean openModel, XmlAttributes a, RecursionLimiter
limiter)
at System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel
model, String ns, ImportContext context, String dataType, XmlAttributes a, Bool
ean repeats, Boolean openModel, RecursionLimiter limiter)
--- End of inner exception stack trace ---
at System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(TypeModel
model, String ns, ImportContext context, String dataType, XmlAttributes a, Bool
ean repeats, Boolean openModel, RecursionLimiter limiter)
at System.Xml.Serialization.XmlReflectionImporter.ImportElement(TypeModel mod
el, XmlRootAttribute root, String defaultNamespace, RecursionLimiter limiter)
at System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultName
space)
at StringBuilder.String.Save(String fileName, String location) in c:\Users\
Wei\Dropbox\Work\Personal\CS\StringBuilder\Data.cs:line 133
at StringBuilder.Program.Main(String[] args) in c:\Users\Wei\Dropbox\Work\Pe
rsonal\CS\StringBuilder\Program.cs:line 48