将复杂值传递给对象以进行 XML 序列化
Posted
技术标签:
【中文标题】将复杂值传递给对象以进行 XML 序列化【英文标题】:Pass complex value to object for XML serialization 【发布时间】:2021-05-20 01:42:24 【问题描述】:我有 XSD 文件,它是生成(通过 xsd.exe 工具)用于序列化的 C# 类的基础。点网核心 3.1。下面是生成的代码
public partial class Deklaracje
public PozycjeSzczegolowe PozycjeSzczegolowe get;set;
public partial class PozycjeSzczegolowe
[System.Xml.Serialization.XmlElementAttibute("Bank", typeof(BankPozycjeSzczegolowe))]
[System.Xml.Serialization.XmlElementAttibute("PodmiotNZ", typeof(PozycjeSzczegolowePodmiotNZ))]
public object[] Items get;set;
有我的序列化代码来获取xml
var myObject = ??? // <= HERE IS PROBLEM
var data = new Declaracje
PozycjeSzczegolowe = new PozycjeSzczegolowe Items = new [] myObject
using (var ms = new MemoryStream())
using (var writer = new XmlTextWriter(ms, Encoding.UTF8))
var xml = new XmlSerializer(typeof(Deklaracje));
xml.Serializer(xmlTextWriter, data)
我的问题是如何将两种类型传递给 myObject:Bank 和 PodmiotNZ 对象以成功生成 XML
-
当我尝试通过匿名类型执行此操作时,我得到“无法序列化匿名类型,因为没有无参数构造函数”
当我尝试使用命名类“MyClass”时,我收到错误“我的类不是预期的。使用 XmlInclude”,我尝试按 parital 类将此参数添加到 Declaration 和 PozycjeSzczegolowe 类。另外我尝试将 extraType 参数传递给 XmlSerializer 构造函数,但我仍然收到此错误
您还有其他想法吗?
【问题讨论】:
【参考方案1】:尝试以下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
namespace ConsoleApplication181
class Program
static void Main(string[] args)
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
Deklaracje data = new Deklaracje()
PozycjeSzczegolowe = new PozycjeSzczegolowe[]
new BankPozycjeSzczegolowe() name = "John",
new PozycjeSzczegolowePodmiotNZ() name = "Mary"
;
using (var ms = new MemoryStream())
using (XmlWriter writer = XmlWriter.Create(ms,settings))
XmlSerializer xml = new XmlSerializer(typeof(Deklaracje));
xml.Serialize(writer, data);
public partial class Deklaracje
public PozycjeSzczegolowe[] PozycjeSzczegolowe get;set;
[XmlInclude(typeof(BankPozycjeSzczegolowe))]
[XmlInclude(typeof(PozycjeSzczegolowePodmiotNZ))]
public partial class PozycjeSzczegolowe
public class BankPozycjeSzczegolowe : PozycjeSzczegolowe
public string name get; set;
public class PozycjeSzczegolowePodmiotNZ : PozycjeSzczegolowe
public string name get; set;
【讨论】:
以上是关于将复杂值传递给对象以进行 XML 序列化的主要内容,如果未能解决你的问题,请参考以下文章