gpt4 book ai didi

c# - 我无法使用 XmlSerializer 在 C# 中序列化对象列表

转载 作者:太空狗 更新时间:2023-10-30 01:21:25 27 4
gpt4 key购买 nike

我有许多测试实现接口(interface) IDoTest 的列表,我想将其存储在一个文件中。我也想从这个文件中读取。

简单地使用 XmlSerializer 将对象存储在我的 IDoTest 列表中似乎很自然。但是当我这样做的时候,我得到了一个模糊的我很抱歉我不能在 System.Xml.Serialization.TypeDesc.CheckSupported() 附近做那个错误

XmlSerializer 只能做一些琐碎的工作吗?或者我错过了什么?他们在谈论 custom serialization在 MSDN。这是我的简化代码示例。

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;

namespace ConsoleApplication1
{
public interface IDoTest
{
void DoTest();
void Setup();
}
internal class TestDBConnection : IDoTest
{
public string DBName;
public void DoTest()
{
Console.WriteLine("DoHardComplicated Test");
}
public void Setup()
{
Console.WriteLine("SetUpDBTest");
}
}
internal class PingTest : IDoTest
{
public string ServerName;
public void DoTest()
{
Console.WriteLine("MaybeDoAPing");
}
public void Setup()
{
Console.WriteLine("SetupAPingTest");
}
}

internal class Program
{
private static void Main(string[] args)
{

TestDBConnection Do1 = new TestDBConnection { DBName = "SQLDB" };
PingTest Do2 = new PingTest { ServerName = "AccTestServ_5" };
List<IDoTest> allTest = new List<IDoTest> { Do1, (Do2) };
// Now I want to serialize my list.
// Its here where I get the error at allTest
XmlSerializer x = new XmlSerializer(allTest.GetType());
StreamWriter writer = new StreamWriter("mySerializedTestSuite.xml");
x.Serialize(writer, allTest);

}
}
}

最佳答案

XmlSerializer无法序列化 interface ,并且推而广之,它无法序列化 List<>的一些接口(interface)。它只能序列化具体的对象类型。

假设您可能希望在某个时候反序列化对象,如果它只输出与该接口(interface)有关的信息,则不能保证所有必要的数据都存在重建原始对象。

This post如果您能够使用抽象基类并显式提供可能出现在列表中的每种可能的对象类型,则展示了一种潜在的解决方法。

关于c# - 我无法使用 XmlSerializer 在 C# 中序列化对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15722978/

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