基于从XSD创建的类编写XML-问题
我已经通过XSD.exe从一个非常复杂的XSD创建了一个VB.net类 这门课看起来像这样(后面还有很多) 这创建了一个看起来像我想要的示例的XML,但示例的一部分还应该是一些其他元素,如b2bdebtors、b2cdebtors、RiskAssociationDetors、凭单、riskAssociationAssignments—所有这些都没有数据,尤其是证券—安全性,我有需要包含的基本数据 XML应该是这样的基于从XSD创建的类编写XML-问题,xml,vb.net,xsd,Xml,Vb.net,Xsd,我已经通过XSD.exe从一个非常复杂的XSD创建了一个VB.net类 这门课看起来像这样(后面还有很多) 这创建了一个看起来像我想要的示例的XML,但示例的一部分还应该是一些其他元素,如b2bdebtors、b2cdebtors、RiskAssociationDetors、凭单、riskAssociationAssignments—所有这些都没有数据,尤其是证券—安全性,我有需要包含的基本数据 XML应该是这样的 <?xml version="1.0" encodin
<?xml version="1.0" encoding="utf-8"?>
<barbadosImportFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<information>
<timeStamp>2021-04-01T15:52:57.727846+01:00</timeStamp>
<systemName>Presystem</systemName>
<numberOfB2BDebtors>0</numberOfB2BDebtors>
<numberOfB2CDebtors>0</numberOfB2CDebtors>
<numberOfRiskAssociationDebtors>0</numberOfRiskAssociationDebtors>
<numberOfVouchers>0</numberOfVouchers>
<numberOfRiskAssociationAssignments>0</numberOfRiskAssociationAssignments>
<numberOfSecurities>1</numberOfSecurities>
<numberOfLimits>0</numberOfLimits>
<numberOfUsers>0</numberOfUsers>
<numberOfSalesRepresentativeDebtorAssignments>0</numberOfSalesRepresentativeDebtorAssignments>
<numberOfSoftfactScorings>0</numberOfSoftfactScorings>
<numberOfExternalIdentifiers>0</numberOfExternalIdentifiers>
<numberOfVoucherAdditionals>0</numberOfVoucherAdditionals>
<numberOfDebtorAdditionals>0</numberOfDebtorAdditionals>
<numberOfCompanyBlacklists>0</numberOfCompanyBlacklists>
<numberOfPersonBlacklists>0</numberOfPersonBlacklists>
</information>
<b2bDebtors />
<b2cDebtors />
<riskAssociationDebtors />
<vouchers />
<riskAssociationAssignments />
<securities>
<security>
<createdAt>2021-04-01T00:00:00</createdAt>
<comment />
抛出“未设置为对象实例的对象”
不幸的是,我在谷歌上找不到解决办法
有什么帮助吗?好的,用谷歌搜索更多我发现了一些有用的东西:
debXML.securities = New importSecurityType(intSize) {}
For i = 0 To intSize
debXML.securities(i) = New importSecurityType()
Next
这将允许访问这样的属性
debXML.securities(0).companyCode = "AT"
按照XSD的定义,序列化工作得非常好。试试以下方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication189
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
//BarbadosImportFile BarbadosImportFile = new BarbadosImportFile()
//{
// security = new List<Security>() {
// new Security() { createdAt = new DateTime(2014,4,1)}
// }
//};
//XmlWriterSettings settings = new XmlWriterSettings();
//settings.Indent = true;
XmlReader reader = XmlReader.Create(FILENAME);
XmlSerializer serializer = new XmlSerializer(typeof(BarbadosImportFile));
BarbadosImportFile barbadosImportFile = (BarbadosImportFile)serializer.Deserialize(reader);
}
}
[XmlRoot("barbadosImportFile")]
public class BarbadosImportFile
{
[XmlArray("securities")]
[XmlArrayItem("security")]
public List<Security> security { get; set; }
}
public class Security
{
public DateTime createdAt { get; set; }
public string comment { get; set; }
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Serialization;
命名空间控制台应用程序189
{
班级计划
{
常量字符串文件名=@“c:\temp\test.xml”;
静态void Main(字符串[]参数)
{
//巴巴多斯导入文件巴巴多斯导入文件=新的巴巴多斯导入文件()
//{
//安全性=新列表(){
//新安全性(){createdAt=new DateTime(2014,4,1)}
// }
//};
//XmlWriterSettings=新的XmlWriterSettings();
//settings.Indent=true;
XmlReader=XmlReader.Create(文件名);
XmlSerializer serializer=新的XmlSerializer(typeof(巴巴多斯导入文件));
巴巴多斯导入文件巴巴多斯导入文件=(巴巴多斯导入文件)序列化程序。反序列化(读取器);
}
}
[XmlRoot(“巴巴多斯导入文件”)]
公共类导入文件
{
[XmlArray(“证券”)]
[XmlArrayItem(“担保”)]
公共列表安全性{get;set;}
}
公共安全
{
public DateTime createdAt{get;set;}
公共字符串注释{get;set;}
}
}
私有属性不会序列化。您需要将私有属性更改为public。@jdweng这只是从xsd生成的类的开始,正如您可以看到的,例如private informationField as importInformationType importInformationType是具有私有字段的部分公共类,但public属性获取/设置值。根据我的代码,序列化对于“信息”非常有效——我只是不知道如何处理数组字段(例如Private securitiesField()作为importSecurityType)
debXML.securities = New importSecurityType(intSize) {}
For i = 0 To intSize
debXML.securities(i) = New importSecurityType()
Next
debXML.securities(0).companyCode = "AT"
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication189
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
//BarbadosImportFile BarbadosImportFile = new BarbadosImportFile()
//{
// security = new List<Security>() {
// new Security() { createdAt = new DateTime(2014,4,1)}
// }
//};
//XmlWriterSettings settings = new XmlWriterSettings();
//settings.Indent = true;
XmlReader reader = XmlReader.Create(FILENAME);
XmlSerializer serializer = new XmlSerializer(typeof(BarbadosImportFile));
BarbadosImportFile barbadosImportFile = (BarbadosImportFile)serializer.Deserialize(reader);
}
}
[XmlRoot("barbadosImportFile")]
public class BarbadosImportFile
{
[XmlArray("securities")]
[XmlArrayItem("security")]
public List<Security> security { get; set; }
}
public class Security
{
public DateTime createdAt { get; set; }
public string comment { get; set; }
}
}