gpt4 book ai didi

c# - 具有抽象(基)/具体(继承)类的 DataContractSerializer

转载 作者:太空宇宙 更新时间:2023-11-03 22:24:03 27 4
gpt4 key购买 nike

给定这段代码

public override void Serialize(BaseContentObject obj)
{
string file = ObjectDataStoreFolder + obj.Slug + ".xml";
if(obj.GetType() == typeof(Page))
{
DataContractSerializer dcs = new DataContractSerializer(typeof Page));
XmlDictionaryWriter myWriter =
XmlDictionaryWriter.CreateTextWriter(new FileStream(file, ileMode.CreateNew, FileAccess.Write),
Encoding.UTF8);
dcs.WriteObject(myWriter, obj);
myWriter.Close();
}
else if(obj.GetType() == typeof(Image))
{
DataContractSerializer dcs = new DataContractSerializer(typeof Image));
...
...
}
}

有没有办法做这样的事情

DataContractSerializer dcs = new DataContractSerializer(obj.GetType());
// this fails however, compiler error

并摆脱上面的那些 if() 语句? DataContractSerializer 的构造函数需要 Type 或 Namespace,但它不适用于 obj.GetType()。

我的类层次结构如下:

BaseContentClass(抽象)

页面(具体,继承BaseContentClass)

Image(具体,继承BaseContentClass)

...

?

最佳答案

告诉序列化程序预期什么:

[KnownType(typeof(Page))]
[KnownType(typeof(Image))]
[DataContract]
public abstract class BaseContentObject { /* ... */ }

[DataContract]
public class Page : BaseContentObject { /* ... */ }

[DataContract]
public class Image : BaseContentObject { /* ... */ }

然后您可以使用 new DataContractSerializer(typeof(BaseContentObject )) 处理所有内容。

关于c# - 具有抽象(基)/具体(继承)类的 DataContractSerializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2056596/

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