gpt4 book ai didi

c# - XMLAttribute 不工作

转载 作者:行者123 更新时间:2023-11-30 23:17:38 26 4
gpt4 key购买 nike

我正在将我的 xml 反序列化为 C# 类。

<?xml version="1.0" encoding="UTF-8"?>
<Applications>
<Application Name = "name1" MakerCheckerType="Operational" SanctionCheckNeeded="N" PreExistCheckNeeded="N" >
<InstrumentTypes>
<InstrumentType Version="1.0" PrimaryKeyExcel="Security Name" Name="Equity">
</InstrumentType>
<InstrumentType Name="Bond" Version="1.0" PrimaryKeyExcel="Security Name">
</InstrumentType>
</InstrumentTypes>
<ProcessSteps>
<ProcessStep VBAFunction="xyz" ExcelName="xyz" Name="Upload" />
<ProcessStep Name ="Approve_Reject" VBAFunction="xyz" ExcelName="xyz"/>
</ProcessSteps>
</Application>
<Application Name = "name2" MakerCheckerType="Real" SanctionCheckNeeded="Y" PreExistCheckNeeded="Y">
<InstrumentTypes>
<InstrumentType Version="1.0" PrimaryKeyExcel="Security Name" Name="Equity">
</InstrumentType>
<InstrumentType Name="Bond" Version="1.0" PrimaryKeyExcel="Security Name">
</InstrumentType>
</InstrumentTypes>
<ProcessSteps>
<ProcessStep VBAFunction="xyz" ExcelName="xyz" Name="Upload" />
<ProcessStep Name ="Approve_Reject" VBAFunction="xyz" ExcelName="xyz"/>
</ProcessSteps>
</Application>
</Applications>

类是:

[XmlType("ProcessStep")]
public class IMAProcessStep
{
private string name;
private string vbaFunction;
private string excelName;

[XmlAttribute("Name")]
public string Name
{
get { return name; }
set { name = value; }
}

[XmlAttribute("VBAFunction")]
public string VBAFunction
{
get { return vbaFunction; }
set { vbaFunction = value; }
}

[XmlAttribute("ExcelName")]
public string ExcelName
{
get { return excelName; }
set { excelName = value; }
}
}

[XmlType("InstrumentType")]
public class IMAInstrumentType
{
[XmlAttribute("Name")]
public string Name
{
get;
set;
}

[XmlAttribute("Version")]
public string Version
{
get;
set;
}

[XmlAttribute("PrimaryKeyExcel")]
public string PrimaryKeyExcel
{
get;
set;
}
}

[XmlType("Application")]
public class IMAApplication
{
[XmlAttribute("Name")]
public string Name { get; set; }

[XmlAttribute("MakerCheckerType")]
public string MakerCheckerType { get; set; }

public bool IsMakerCheckerType
{
get
{
if (MakerCheckerType == "Real")
return true;
return false;
}
set
{
if (value)
MakerCheckerType = "Real";
else
MakerCheckerType = "Operational";
}
}

[XmlAttribute("SanctionCheckNeeded")]
public string SanctionCheckNeeded { get; set; }

[XmlAttribute("PreExistCheckNeeded")]
public string PreExistCheckNeeded { get; set; }

public bool IsSanctionCheckNeeded
{
get
{
return SanctionCheckNeeded == "Y";
}
set
{
SanctionCheckNeeded = value ? "Y" : "N";
}
}

public bool IsPreExistCheckNeeded
{
get
{
if (PreExistCheckNeeded == "Y")
return true;
return false;
}
set
{
if (value)
PreExistCheckNeeded = "Y";
else
PreExistCheckNeeded = "N";
}
}

[XmlArray("ProcessSteps")]
[XmlArrayItem(ElementName = "ProcessStep")]
public List<IMAInstrumentType> SupportedInstrumentTypes { get; set; }

[XmlArray("InstrumentTypes")]
[XmlArrayItem(ElementName = "InstrumentType")]
public List<IMAProcessStep> ProcessSteps { get; set; }
}

这里我是如何反序列化它的...

List<IMAApplication> appConfig = null;

var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configFilePath);

var xRoot = new XmlRootAttribute();
xRoot.ElementName = "Applications";
xRoot.IsNullable = true;
var serializer = new XmlSerializer(typeof(List<IMAApplication>), xRoot);


using (var stream = File.OpenRead(path))
appConfig = (List<IMAApplication>)serializer.Deserialize(stream);


return appConfig;

IMAApplication 反序列化成功,但 processSteps 和 InstrumentTypes 仅获得它们的 Name 属性值。其余属性为空。

谁能告诉我这里出了什么问题。

最佳答案

尝试以下操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;

namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
IMAApplications applications = Deserialize(FILENAME);
}

static IMAApplications Deserialize(string configFilePath)
{
IMAApplications appConfig = null;

var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configFilePath);

var xRoot = new XmlRootAttribute();
xRoot.ElementName = "Applications";
xRoot.IsNullable = true;
var serializer = new XmlSerializer(typeof(IMAApplications), xRoot);


using (var stream = File.OpenRead(path))
appConfig = (IMAApplications)serializer.Deserialize(stream);


return appConfig;
}
}
[XmlRoot("ProcessStep")]
public class IMAProcessStep
{
private string name;
private string vbaFunction;
private string excelName;

[XmlAttribute("Name")]
public string Name
{
get { return name; }
set { name = value; }
}

[XmlAttribute("VBAFunction")]
public string VBAFunction
{
get { return vbaFunction; }
set { vbaFunction = value; }
}

[XmlAttribute("ExcelName")]
public string ExcelName
{
get { return excelName; }
set { excelName = value; }
}
}

[XmlRoot("InstrumentType")]
public class IMAInstrumentType
{
[XmlAttribute("Name")]
public string Name
{
get;
set;
}
[XmlAttribute("Version")]
public string Version
{
get;
set;
}
[XmlAttribute("PrimaryKeyExcel")]
public string PrimaryKeyExcel
{
get;
set;
}
}
[XmlRoot("Applications")]
public class IMAApplications
{
[XmlElement("Application")]
public List<IMAApplication> applications { get; set; }
}

[XmlRoot("Application")]
public class IMAApplication
{
[XmlAttribute("Name")]
public string Name { get; set; }
[XmlAttribute("MakerCheckerType")]
public string MakerCheckerType { get; set; }

public bool IsMakerCheckerType
{
get
{
if (MakerCheckerType == "Real")
return true;
return false;
}
set
{
if (value)
MakerCheckerType = "Real";
else
MakerCheckerType = "Operational";
}
}

[XmlAttribute("SanctionCheckNeeded")]
public string SanctionCheckNeeded { get; set; }
[XmlAttribute("PreExistCheckNeeded")]
public string PreExistCheckNeeded { get; set; }

public bool IsSanctionCheckNeeded
{
get
{
return SanctionCheckNeeded == "Y";
}
set
{
SanctionCheckNeeded = value ? "Y" : "N";
}
}
public bool IsPreExistCheckNeeded
{
get
{
if (PreExistCheckNeeded == "Y")
return true;
return false;
}
set
{
if (value)
PreExistCheckNeeded = "Y";
else
PreExistCheckNeeded = "N";
}
}


[XmlArray("InstrumentTypes")]
[XmlArrayItem(ElementName = "InstrumentType")]
public List<IMAInstrumentType> SupportedInstrumentTypes { get; set; }

[XmlArray("ProcessSteps")]
[XmlArrayItem(ElementName = "ProcessStep")]
public List<IMAProcessStep> ProcessSteps { get; set; }
}
}

关于c# - XMLAttribute 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41329702/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com