Я пытаюсь десериализовать онлайн XML-файл и записать результаты в базу данных.Однако я получаю следующую ошибку:
"System.InvalidOperationException: 'В XML-документе (2, 2) обнаружена ошибка"
Внутреннее исключение
"InvalidOperationException: http://deutsche -boerse.com / dbag / app / open / xetra '> не ожидалось»
ниже мой код:
class Program
{
public static void Main()
{
Program semoAPI = new Program();
//Intraday Market Results
using (WebClient webClient = new WebClient())
{
WebClient n = new WebClient();
var json = n.DownloadString("https://reports.semopx.com/api/v1/documents/static-reports?" +
"page=1&page_size=1&order_by=ASC&ReportName=Intraday%20Market%20Results%20Order&Group=Market%20Data");
SemoReports semoReports = JsonConvert.DeserializeObject<SemoReports>(json);
Console.WriteLine("Intraday Market Results Report: ");
Console.WriteLine(semoReports.ResourceBaseUri + "/" + semoReports.Items[0].ResourceName);
string imrXML = semoReports.ResourceBaseUri + "/" + semoReports.Items[0].ResourceName;
XDocument document = XDocument.Load(imrXML);
semoAPI.DeserializeIntradayMarketResults(imrXML);
}
}
//IntradayMarketResults to Database
private void DeserializeIntradayMarketResults(string filename)
{
//Visual only not needed
Console.WriteLine("\n" + "Reading IntradayMarketResults XML File");
Console.WriteLine("===========================================================");
// Create an instance of the XmlSerializer.
XmlSerializer serializer = new XmlSerializer(typeof(IntradayMarketResults));
// Declare an object variable of the type to be deserialized.
IntradayMarketResults item;
using (XmlReader reader = XmlReader.Create(filename))
{
// Call the Deserialize method to restore the object's state.
item = (IntradayMarketResults)serializer.Deserialize(reader);
//Write out the properties of the object. (Visual Only, not needed)
Console.Write(
item.IMRReportHeader[0].exchNam + "\t" +
item.IMRReportHeader[0].envText + "\t" +
item.IMRReportHeader[0].rptCod + "\t" +
item.IMRReportHeader[0].rptName + "\t" +
item.IMRReportHeader[0].rptPrntEffDat + "\t" +
item.IMRReportHeader[0].rptPrntRunDat + "\n \n \n");
//write the properties to the db
using (SEMOContext context = new SEMOContext())
{
context.IntradayMarketResultsReports.Add(item);
context.SaveChanges();
}
}
Также вот как я настроил классы:
public class IntradayMarketResults
{
public IMRReportHeader[] IMRReportHeader { get; set; }
}
[XmlRoot(ElementName = "rptHdr")]
public class IMRReportHeader
{
[Key]
public int RrportID { get; set; }
public string exchNam { get; set; }
public string envText { get; set; }
public string rptCod { get; set; }
public string rptName { get; set; }
public string rptPrntEffDat { get; set; }
public string rptPrntRunDat { get; set; }
}
Что я пробовал:
Я пытался добавить следующее к классу
[Serializable, XmlRoot("tc540")]
Я также пытался:
[XmlRoot(ElementName = "tc540", DataType = "string", IsNullable = false)]
Также пытался добавить во время выполнения:
//Root error fix
XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "tc540";
//xRoot.Namespace = "https://deutsche-boerse.com/dbag/app/open/xetra";
xRoot.IsNullable = true;
XmlSerializer serializer = new XmlSerializer(typeof(IntradayMarketResults), xRoot);
* 1036И, наконец, я попытался:
XmlSerializer serializer = new XmlSerializer(typeof(IntradayMarketResults), new XmlRootAttribute("tc540"));
Даже после попытки всех этих стимулов я все еще получаю то же сообщение об ошибке.
Ссылка на файл XML, который я пытаюсь десериализовать: https://reports.semopx.com/documents/IDC_OrderFile_20190331_20190401053002.xml
PS.Я знаю, что этот код работает так же, как и для более простого XML-файла из того же API.Также я знаю, что строки console.writeline не нужны, это было для визуальных целей при отладке.
Я просто не могу заставить его работать для более сложных файлов XML.
Ссылка на более простой XML-файл: https://reports.semopx.com/documents/ExchangeTransparencyData_NI-IDA3_20190401_20190401161901.xml
Спасибо за любую помощь заранее!