【问题标题】:How to convert from 'T' to XML in C#如何在 C# 中将“T”转换为 XML
【发布时间】:2021-08-19 12:43:30
【问题描述】:

我正在尝试将通用对象序列化为 XML:

public void SaveEntry(T Entry) {
    try {
        XmlSerializer inst = new XmlSerializer(Entry);
    } catch { ... }
}

但我收到一个错误CS1503:

错误CS1503 参数1:无法从T 转换为System.Xml.Serialization.XmlTypeMapping

我该如何解决这个问题?

【问题讨论】:

标签: c# xml


【解决方案1】:

您将要序列化的对象传递给序列化程序的构造函数:

var inst = new XmlSerializer(Entry);

但是,这是无效的;根据the documentation,您尝试使用的构造函数接受Type 作为参数。

初始化XmlSerializer类的新实例,该类可以将指定类型的对象序列化为XML文档,并将XML文档反序列化为指定类型的对象。

public XmlSerializer (Type type);

因此,您可以使用typeof 调用构造函数来指定T 的类型:

var serializer = new XmlSerializer(typeof(T));

这很可能是您想要做的,这样做可以解决您的 CS1503 错误。此外,要序列化您的Entry,您需要调用Serialize 方法:

var xmlData = string.Empty;
using (var textWriter = new StringWriter()) {
    using (var xmlWriter = XmlWriter.Create(textWriter)) {
        var serializer = new XmlSerializer(typeof(T));
        serializer.Serialize(xmlWriter, Entry);
        xmlData = textWriter.ToString();
    }
}

【讨论】:

    【解决方案2】:

    您需要将相关的Type 对象传递给构造函数。 对象被传递给Serialize

    XmlSerializer inst = new XmlSerializer(typeof(T));
    var xml = inst.Serialize(yourStream, Entry);
    

    【讨论】:

      猜你喜欢
      • 2010-09-07
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      相关资源
      最近更新 更多