我想制定出序列化嵌套类而不必序列化整个嵌套类成员的最佳方法。假设以下类:嵌套类成员序列化
public class ClassA
{
public decimal ID { get; set; }
}
public class ClassA1 : ClassA
{
public decimal Name { get; set; }
public decimal Value { get; set; }
public decimal Description { get; set; }
}
public class ClassA2 : ClassA
{
public ClassA1 Details { get; set; }
public int SomeValue { get; set; }
}
我有一个类型为ClassA1的对象的固定列表存储在类型为List的变量中。
我也有存储类型列表中
的变量类型ClassA2的对象列表,我想什么做的是序列化和反序列化我ClassA2对象列表。自动序列化将序列化每个ClassA1对象的全部内容,但我只想序列化并反序列化ClassA1.ID成员,然后在反序列化时从我的固定列表中检索对象引用。
自动序列使我这个:
...
<ClassA2>
<ID>IDStringForObjectClassA2</ID>
<Details>
<ClassA1>
<ID>IDStringForObjectOfClassA1</ID>
<Name>MyNameValue</Name>
<Value>MyStringValue</Value>
<Description>MyDescriptionValue</Description>
</ClassA1>
</Details>
<SomeValue>0</SomeValue>
</ClassA2>
最终的结果我想在我的XML是这个
...
<ClassA2>
<ID>IDStringForObjectClassA2</ID>
<Details>
<ClassA1>
<ID>IDStringForObjectOfClassA1</ID>
</ClassA1>
</Details>
<SomeValue>0</SomeValue>
</ClassA2>
,并在ClassA1.ID成员的反序列化,我想在预加载列表中找到实际对象
编辑:文档s下面
public class Document
{
private _ClassA2;
public Document() { _ClassA2 = null; }
public ClassA2 ClassA2
{
get { return _ClassA2; }
set { _ClassA2 = value; }
}
public string Serialize(StreamWriter writer)
{
var serializer = new XmlSerializer(typeof(ClassA2));
serializer.Serialize(writer, this);
return writer.ToString();
}
public static ClassA2 DeSerialize(StreamReader reader)
{
var serializer = new XmlSerializer(typeof(ClassA2));
ClassA2 value = serializer.Deserialize(reader) as ClassA2 ;
return value;
}
}
您用于反序列化的当前代码是什么? – RBT
根据您提到的类,您的XML无法用于反序列化。 'Details'标签里面应该有'ClassA1'标签。 'ClassA2'也没有结束标签。 – RBT
@RBT我使用标准XmlSerializer类反序列化 反正是有上述纳入这个或做我必须改变,以完全自定义的反序列化 'VAR串行=新的XmlSerializer(typeof运算(CableDocument));' 'CableDocument value = serializer。反序列化(阅读器)为CableDocument;' 编辑:对于我的生活,我无法正确地在上面工作markdown – Woodjitsu