我有一个类,我需要将它序列化为 XML,但只有特定的属性,即不是全部。最好的方法是什么?另一种方法是创建属性及其值的字典,然后序列化字典。
问问题
100 次
2 回答
3
看看XmlAttributes.XmlIgnore Property。您需要做的就是装饰您不想序列化的字段[XmlIgnoreAttribute()]
示例类:
// This is the class that will be serialized.
public class Group
{
// The GroupName value will be serialized--unless it's overridden.
public string GroupName;
/* This field will be ignored when serialized--unless it's overridden. */
[XmlIgnoreAttribute]
public string Comment;
}
于 2012-10-16T08:01:33.290 回答
0
上面的答案效果很好。但我不喜欢所有内容都被序列化并且只有指定字段不存在的想法。只是一个不同偏好的情况,真的,我喜欢控制事情的运作方式。
使用来自 MS 的 ISerializable 是:“允许对象控制自己的序列化和反序列化。” 和一些反思:
// Required by ISerializable
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
FieldInfo[] fields = this.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
foreach (FieldInfo field in fields)
{
if (!IsSerializable(field))
continue;
info.AddValue(field.Name, field.GetValue(this));
}
}
protected bool IsSerializable(FieldInfo info)
{
object[] attributes = info.GetCustomAttributes(typeof(SerializableProperty), false);
if (attributes.Length == 0)
return false;
return true;
}
“SerializableProperty”是我放在要序列化的字段上的空属性。
至于哪个序列化器,完全取决于你。XML 很好,因为您可以在之后阅读和编辑它。但是,我选择了 BinaryFormatter,它可以在复杂或大型结构的情况下提供更小的文件大小。
于 2012-10-16T11:34:19.997 回答