Добрый день. Есть веб-сервис для получения данных по клиенту по ИНН. Это обычный GET запрос, в ответ выдает xml. Я сохранил xsd схему ответа с полным набором полей, конвертнул в классы C# с помощью Visual Studio Shell. При попытке получения данных, бывает такое что некоторых параметров нет, они пустые и выводится вот такая ошибка:
System.InvalidOperationException: "В документе XML (1, 40) присутствует ошибка." C#
Код программы:
xmlrequest.cs
class XMLRequest
{
private Object O;
private Type Otype;
public XMLRequest(Type PassedClass)
{
this.O = Activator.CreateInstance(PassedClass);
this.Otype = PassedClass;
}
public Object ReturnObjectFromRequest(string requestString)
{
if (this.O is null)
{
return null;
}
WebRequest request = WebRequest.Create(requestString);
XmlSerializer serializer = new XmlSerializer(O.GetType());
try
{
using (Stream stream = request.GetResponse().GetResponseStream())
{
O = serializer.Deserialize(stream);
}
}
catch (Exception ex)
{
MessageBox.Show($"{ex.Message}");
return null;
}
return O;
}
}
Form1.cs
XMLRequest reqManager = new XMLRequest(typeof(req.ArrayOfreq));
req.ArrayOfreq Obj = (req.ArrayOfreq)reqManager.ReturnObjectFromRequest($"https://focus-api.kontur.ru/api3/egrDetails?key={key}&inn={inn}&xml");
var flat = Obj.req[0].UL.legalAddress.parsedAddressRF.flat.topoValue;
Классы которые получились из xsd схемы (кусок)
public partial class legalAddress
{
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
public parsedAddressRF parsedAddressRF;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
public string date;
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1586.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class parsedAddressRF
{
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
public string zipCode;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
public string regionCode;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
public toponym regionName;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
public toponym district;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
public toponym city;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
public toponym settlement;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
public toponym street;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
public toponym house;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
public toponym bulk;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
public toponym flat;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
public string kladrCode;
}
Obj.req[].UL.legalAddress.parsedAddressRF.flat было null.
– Andrey Sherman Jul 04 '17 at 07:23nullнужно проверятьflat, а неtopoValue. Однако, ошибка в заголовке темы возникает при парсинге xml, то есть xml некорректный. В общем, уточните проблему. – Alexander Petrov Jul 04 '17 at 08:16