将复杂值传递给对象以进行 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)
    

我的问题是如何将两种类型传递给 myObjectBankPodmiotNZ 对象以成功生成 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 序列化的主要内容,如果未能解决你的问题,请参考以下文章

按值传递列表以发挥作用

XmlSerializer C# - 对象传递的简单值被转换并显示为 xml 文件中的科学值

java 值传递 数组传递

如何将复杂的键值参数表单视图传递给mvc中的控制器?

Java方法中传递数组与改变数组值的问题

Java方法中传递数组与改变数组值的问题