标签: xml-serialization

Xml 序列化错误:无法转换类型的对象

有人可以帮助我解决一个奇怪的序列化问题吗?我在一个环境中遇到这个问题,并且在所有环境中都工作正常。但它在特定环境中失败了。所以我在这里指定为奇怪

代码

public SomeType[] Deserialize(string xml)
{
    XmlSerializer serializer = new XmlSerializer(typeof(SomeType[]));
    StringReader stringReader = new StringReader(xml);
    SomeType[] types = (SomeType[])serializer.Deserialize(stringReader);
    stringReader.Close();
    return types;
}
Run Code Online (Sandbox Code Playgroud)

序列化 XML 数据:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfSomeType>
  <SomeType>
    <Field1>val</Field1>
    <Field2>val</Field2>
    <Field3>val</Field3>
  </SomeType>
</ArrayOfSomeType>
 
Run Code Online (Sandbox Code Playgroud)

例外的是:

System.InvalidCastException:无法将类型“SomeType[]”的对象强制转换为类型“SomeType”。

在 Microsoft.Xml.Serialization.GenerateAssembly.XmlSerializationWriterSomeType.Write11_SomeType(对象 o)

c# serialization xml-serialization

2
推荐指数
1
解决办法
6275
查看次数

反序列化具有未知元素顺序的 XML

我正在尝试为一项规格确实不足的服务实现一个客户端。它类似于 SOAP,尽管它没有 WSDL 或等效文件。该规范也没有提供有关元素正确排序的任何信息 - 它们在规范中按字母顺序列出,但如果它们在请求中的顺序不正确,则服务会返回 XML 解析错误(所述顺序由检查示例)。

我可以它来提交请求,即使这很痛苦。但是,我不知道如何正确处理响应。

使用两者SoapEnvelope和直接使用XmlSerializer,如果响应包含我尚未正确订购的元素,它会显示null在我的对象上。再次,我可以设法处理这个问题,并使用 attribute 手动排序类属性Order我无法判断原始 XML 是否有一个我没有正确排序并因此保留为 的字段null

这引出了当前的问题: 如何检查 XmlSerializer 是否删除了字段

c# serialization soap xml-serialization xmlserializer

2
推荐指数
1
解决办法
3574
查看次数

C# XML 序列化删除包装元素

我写这篇文章是因为我对 XmlSerializer 有问题。我想要以下格式的 XML:

<?xml version="1.0" encoding="utf-8"?>
<RootXML>
    <e-Invoice>
      <Version>1.03</Version>
    </e-Invoice>
    <TradeInvoice>
        <Id>1</Id>
        <Value>100</Value>
    </TradeInvoice>
    <e-Invoice>
      <Version>1.03</Version>
    </e-Invoice>
    <TradeInvoice>
        <Id>2</Id>
        <Value>200</Value>
    </TradeInvoice>
    <e-Invoice>
        <Version>1.03</Version>
    </e-Invoice>
    <TradeInvoice>
        <Id>3</Id>
        <Value>300</Value>
    </TradeInvoice>
</RootXML>
Run Code Online (Sandbox Code Playgroud)

所以我创建了以下课程。

[XmlRoot("RootXML")]
public class Root
{
    public Root()
    {
        RootBodies = new List<RootBody>();
    }

    [XmlElement("e-Invoice")]
    public List<RootBody> RootBodies { get; set; }
}

public class RootBody
{
    public RootBody()
    {
        TradeInvoice = new TradeInvoice();
        EInvoiceInfo = new Version(); ;
    }

    [XmlElement("e-Invoice")]
    public Version EInvoiceInfo { get; set; }

    [XmlElement("TradeInvoice")]
    public …
Run Code Online (Sandbox Code Playgroud)

c# xml xml-serialization

2
推荐指数
1
解决办法
2699
查看次数

反序列化具有属性和值的元素

给定一个同时计算属性和元素值的 XML 结构,如何使用 System.Xml.Serialization 属性构造我的 C# 类?

我的 XML 看起来像这样:

<Accounts>
    <Number credit="1000">100987654321</Number>
    <Number credit="0"   >100987654322</Number>
<Accounts>
Run Code Online (Sandbox Code Playgroud)

我一直在尝试使用这个类结构,但它不接受 XML。

public class Customer
{
    [DataMember, XmlArrayItem(ElementName = "Accounts")]
    public AccountNumber[] AccountNumbers;
}

public class AccountNumber
{
        [DataMember, XmlElement(ElementName = "Number")]
        public string AccountNumber;

        [DataMember, XmlAttribute(AttributeName = "credit")]
        public int Credit;
}
Run Code Online (Sandbox Code Playgroud)

诀窍是不要在“Number”元素中嵌套数字数组。我们经常在例如中看到这种结构。html 标签,其中您可能有一个具有某种样式的标签,以及之间的实际值

"... height=12px> value </..."
Run Code Online (Sandbox Code Playgroud)

c# attributes xml-serialization

2
推荐指数
1
解决办法
1094
查看次数

如何在.Net中序列化COM对象?

我需要使用.net或Delphi使用.net序列化一个Com对象.这可能吗?

c# com-interop xml-serialization delphi.net

1
推荐指数
1
解决办法
2567
查看次数

在C#中将XML反序列化为类obj

这是我在200多个这样的条目的巨大XML文件中的条目之一.

<TradeFills>
 <TradeFill>
  <Broker>xxx</Broker>
  <CustomerAccount/>
  <qwFillTransID>xxxxxxxxxxxxxxxxxxx</qwFillTransID>
  <qwPrevTransID>xxx</qwPrevTransID>
  <qwGroupTransID>xxxxxxxxxxxxxxxxx</qwGroupTransID>
  <GroupTransID>xxxxxxxx</GroupTransID>
  <TransID>x</TransID>
  <Service>xxxxxxxxxxxxxxxx</Service>
  <Symbol>xx</Symbol>
  <Exchange>xxxxx</Exchange>
  <InstClass>xxxxxxxx</InstClass>
  <InstSubClass>xxxxxxx</InstSubClass>
  <ContractSymbol>xxxx</ContractSymbol>
  <ExpirationDate>xxxxxxxx</ExpirationDate>
  <Month>xx</Month>
  <Year>xxxx</Year>
  <Strike>xxx</Strike>
  <TradePCU>xxxx</TradePCU>
  <Buy>x</Buy>
  <Quantity>xx</Quantity>
  <Price>xxxxx</Price>
  <FillTime>xxxxxxxxxxxxxxx</FillTime>
  <PosUpdated>xxxxxxxxxxx</PosUpdated>
  <Description/>
 </TradeFill>
</TradeFills>
Run Code Online (Sandbox Code Playgroud)

我试图将其反序列化为类对象,但每次都失败.

到目前为止这是我的代码:

using System;
Run Code Online (Sandbox Code Playgroud)

使用System.Collections.Generic; 使用System.Text; 使用System.IO; 使用System.Xml.Serialization;

namespace DeserializeXML {public class Program {

    // This is the class that will be deserialized.
    [Serializable()]
    public class TradeFill
    {
        [XmlElement("Broker")]
        public string broker;

        [XmlElement("qwFillTransID")]
        public string qwFillTransId;

        [XmlElement("qwPrevTransID")]
        public string qwPrevTransId;

        [XmlElement("qwGroupTransID")]
        public string qwGroupTransId;

        [XmlElement("GroupTransID")]
        public string GroupTransID;

        [XmlElement("TransID")]
        public string …
Run Code Online (Sandbox Code Playgroud)

.net c# xml xml-serialization

1
推荐指数
1
解决办法
9026
查看次数

Scala的哪个XML序列化库?

我在寻找Scala的xml序列化库。对于json序列化,我使用lift-json,并且希望我的xml序列化库相似,这意味着:

  • 案例类的自动序列化(没有任何格式定义)
  • 标量类型的智能序列化:集合,选项等
  • 能够为其他数据类型定义格式以调整其序列化方式的能力
  • 反序列化不是基于隐式而是基于类名(有时我只有必须反序列化的类型的类/类名)

你知道这样的图书馆是否存在吗?

xml serialization scala xml-serialization

1
推荐指数
1
解决办法
3511
查看次数

如何在C#中将XML子元素添加到简单数据类型

我正在尝试将简单数据类型序列化为XML,但是以特定方式来满足现有API.(假设必须以这种方式形成所需的XML)

这是所需的XML:

<foo>
<value>derp</value>
</foo>
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望在课堂上代表这一点

String foo;
Run Code Online (Sandbox Code Playgroud)

我所知道的唯一两个选择是

  1. 简单的序列化,当然只是导致
    <foo>derp</foo>
  1. 创建一个Foo类,它创建所需的XML,但强制用户键入
    myFoo.Value = "derp";

而不是更好的

foo = "derp";

有没有办法在类中使用简单的字符串,但用<value>子元素表示它?

.net c# xml xml-serialization

1
推荐指数
1
解决办法
140
查看次数

将XML序列化为byte []而不是file

这必须非常简单,但我无法通过搜索找到它.

我有以下代码将对象序列化为文件并返回.但现在我想序列化为一个byte []并返回.

XmlSerializer serializer = new XmlSerializer(typeof(Class1));
using (TextWriter textWriter = new StreamWriter(path))
    serializer.Serialize(textWriter, class1);
using (TextReader textReader = new StreamReader(path))
    class1b = (Class1)serializer.Deserialize(textReader);
Run Code Online (Sandbox Code Playgroud)

我尝试使用MemoryStream:

byte[] buffer = new byte[1000];
using (TextWriter textWriter = new MemoryStream(buffer))
...
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个错误.那我该怎么办呢?

c# serialization xml-serialization

1
推荐指数
1
解决办法
839
查看次数

我们如何从XMLSerializer函数传递多个对象

我们如何通过函数重载方法传递不同类的不同对象?

示例代码:

static public void SerializeToXML(Movie movie)
{
    XmlSerializer serializer = new XmlSerializer(typeof(Movie));
    TextWriter textWriter = new StreamWriter(@"C:\movie.xml");
    serializer.Serialize(textWriter, movie);
    textWriter.Close();
}
Run Code Online (Sandbox Code Playgroud)

当我使用这段代码时:

static public void SerializeToXML(FbTextView p, FbTextField q)
{
    try
    {
        XmlSerializer textviewserilizer = new XmlSerializer(typeof(FbTextView));
        XmlSerializer textfieldserilizer = new XmlSerializer(typeof(FbTextField));

        TextWriter textWriter = new StreamWriter(@"D:\movie.xml");
        textviewserilizer.Serialize(textWriter, p);
        textfieldserilizer.Serialize(textWriter, q);
        textWriter.Close();
    }
    catch (Exception ex)
    {
        while (ex != null)
        {
            Trace.WriteLine(ex.Message);
            ex = ex.InnerException;
            MessageBox.Show(ex.Message);
        }
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

它的输出xml显示一些结果:

XML Parsing Error: junk after document element …
Run Code Online (Sandbox Code Playgroud)

c# xml-serialization

1
推荐指数
1
解决办法
1657
查看次数