繁体   English   中英

将复数值传递给 object 用于 XML 序列化

[英]Pass complex value to object for XML serialization

我有 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 生成

  1. 当我尝试通过匿名类型执行此操作时,我得到“无法序列化匿名类型,因为没有无参数构造函数
  2. 当我尝试使用名为 class“MyClass”时,我收到错误“我的 class 不是预期的。使用 XmlInclude ”,我试图通过 parital class 将此参数添加到声明和 PozycjeSzczegolow 类。 另外我尝试将 extraType 参数传递给 XmlSerializer 构造函数,但我仍然收到此错误
  3. 你有别的想法吗?

尝试以下操作:

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; }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM