我有一个.net配置类:
public class Config {
public SortedSet<string> SiteURLs { get; private set; }
public Config() {
SiteURLs = new SortedSet<string>();
}
}
我正在尝试将其发送到XmlSerializer,该版本失败并显示“存在反映类型的错误”。将[XmlIgnore]添加到SiteURLs属性允许类序列化。
我真的必须在这里编写自定义序列化代码吗?文档表明只要属性实现ICollection并提供“添加”方法,它就应该有效。也许我错过了一些其他必要的配置。
如何使用.NET序列化/反序列化泛型的示例似乎都在整个地方都有自定义序列化。
答案 0 :(得分:0)
尝试将setter更改为public。
XmlSerializer
无法处理私人或受保护的字段。
答案 1 :(得分:0)
试试这个:
//
//some example class
//
public class Music: IComparable<Music>
{
public Music() { }
public string Author { get; set; }
public string Name { get; set; }
public int CompareTo(Music other)
{
if (Author == other.Author)
{
return Name.ToUpper().CompareTo(other.Name.ToUpper());
}
else
{
return Author.ToUpper().CompareTo(other.Author.ToUpper());
}
}
}
//
// that is to deserialize
//
var musics = new SortedSet<Music>();
var mPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\j.txt";
if (File.Exists(mPath))
{
File.Copy(mPath, mPath.Replace(".txt", DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ".txt"));
var ser = new XmlSerializer(typeof(List<Music>));
using (var sr = new StreamReader(mPath))
{
musics = new SortedSet<Music>((List<Music>)ser.Deserialize(sr));
}
}
//
// that is to serialize
//
var ser = new XmlSerializer(typeof(List<Music>));
using (var wri = new StreamWriter(mPath))
{
ser.Serialize(wri, musics.ToList());
}