gpt4 book ai didi

c# - 嵌套类成员序列化

转载 作者:太空宇宙 更新时间:2023-11-03 23:00:42 25 4
gpt4 key购买 nike

我正在尝试找出最好的方法来序列化嵌套类,而不必序列化整个嵌套类成员。假设以下类:

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 类型的对象列表,这些对象存储在一个 List 类型的变量中

我想做的是序列化和反序列化我的 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 成员时,我想在预加载列表中找到一个实际对象

编辑:下面的文档序列化器类

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;
}
}

最佳答案

要排除元素,您可以在与数据相同的类中定义一个“ShouldSerialize”方法:

public bool ShouldSerializeDescription()
{
return false;
}

public decimal Description { get; set; }

或者使用属性上方的[XmlIgnore]属性:

[XmlIgnore]
public decimal Description { get; set; }

在大多数情况下,我建议使用 XmlIgnore。

关于定位一个成员来填充字段,据我所知,没有任何内置的东西可以实现这一点。您只需要遍历并手动定位值。参见 this post获取更多信息。

关于c# - 嵌套类成员序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43223781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com