有人可以帮助我解决一个奇怪的序列化问题吗?我在一个环境中遇到这个问题,并且在所有环境中都工作正常。但它在特定环境中失败了。所以我在这里指定为奇怪
代码
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)
我正在尝试为一项规格确实不足的服务实现一个客户端。它类似于 SOAP,尽管它没有 WSDL 或等效文件。该规范也没有提供有关元素正确排序的任何信息 - 它们在规范中按字母顺序列出,但如果它们在请求中的顺序不正确,则服务会返回 XML 解析错误(所述顺序由检查示例)。
我可以用它来提交请求,即使这很痛苦。但是,我不知道如何正确处理响应。
使用两者SoapEnvelope和直接使用XmlSerializer,如果响应包含我尚未正确订购的元素,它会显示null在我的对象上。再次,我可以设法处理这个问题,并使用 attribute 手动排序类属性,Order但我无法判断原始 XML 是否有一个我没有正确排序并因此保留为 的字段null。
这引出了当前的问题: 如何检查 XmlSerializer 是否删除了字段?
我写这篇文章是因为我对 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) 给定一个同时计算属性和元素值的 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) 我需要使用.net或Delphi使用.net序列化一个Com对象.这可能吗?
这是我在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) 我在寻找Scala的xml序列化库。对于json序列化,我使用lift-json,并且希望我的xml序列化库相似,这意味着:
你知道这样的图书馆是否存在吗?
我正在尝试将简单数据类型序列化为XML,但是以特定方式来满足现有API.(假设必须以这种方式形成所需的XML)
这是所需的XML:
<foo>
<value>derp</value>
</foo>
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望在课堂上代表这一点
String foo;
Run Code Online (Sandbox Code Playgroud)
我所知道的唯一两个选择是
<foo>derp</foo>
myFoo.Value = "derp";
而不是更好的
foo = "derp";
有没有办法在类中使用简单的字符串,但用<value>子元素表示它?
这必须非常简单,但我无法通过搜索找到它.
我有以下代码将对象序列化为文件并返回.但现在我想序列化为一个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)
但是我收到了一个错误.那我该怎么办呢?
我们如何通过函数重载方法传递不同类的不同对象?
示例代码:
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)