【问题标题】:Pass complex value to object for XML serialization将复杂值传递给对象以进行 XML 序列化
【发布时间】: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

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

【问题讨论】:

    标签: c# .net xml serialization xsd


    【解决方案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; }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 2015-05-01
      相关资源
      最近更新 更多