为了方便起见,我有一个实现 ICollection 的类。当类被序列化为 XML 时,所有公共属性都被跳过,只有实际的集合被序列化。我从 MSDN 阅读了以下内容
实现 ICollection 或 IEnumerable 的类。
- 只有集合被序列化,而不是公共属性。
有没有办法解决这个问题?有没有办法让一个实现 ICollection 的类仍然会输出公共属性?还是我必须使用 XmlWriter 自己做?
以防万一需要一个例子。
public class Batch: ICollection<Foo>
{
public string Bar { get; set; }
public int Baz { get; set; }
public List<Foo> Foos { get; private set; }
public IEnumerator<Foo> GetEnumerator()
{
return Foos.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return Foos.GetEnumerator();
}
public void Add(Foo item)
{
Foos.Add(item);
}
public void Clear()
{
Foos.Clear();
}
public bool Contains(Foo item)
{
return Foos.Contains(item);
}
public void CopyTo(Foo[] array, int arrayIndex)
{
Foos.CopyTo(array, arrayIndex);
}
public bool Remove(Foo item)
{
return Foos.Remove(item);
}
public int Count { get { return Foos.Count; } }
public bool IsReadOnly { get { return false; } }
}
之所以这样,是因为在我的代码的另一部分中,我正在处理事物的集合。IList IList 等。但是对于批次,有适用于每个 Foo 的信息,但是对于一个特定批次的每个 foo,该信息是相同的。可能像批次 ID 或 Created DateTime。我希望能够在我的代码的某些部分以相同的方式处理我的批次和其他集合,因为我只关心一个集合并且有一个计数。我不在乎某些信息与该集合中的每个项目相同。
我想这样做的原因是为了序列化。我试图删除多余的信息。如果有另一种方式来组织我的课程,我不会失去那个非常重要的计数,那么我会全神贯注。我希望避免创建另一个只包含这样一个简单事物的计数的界面。感觉很脏,但它可能是正确的。