#c# #serialization #soap
Вопрос:
У меня есть этот XML (для примера):
<DocumentRoot>
<Document>
<Name>Doc1</Name>
<Id>2e0087ed-717f-4e01-a12a-eadfac0c768</Id>
<Children>
<Document>
<Name>docChild</Name>
<Id>6bd00d96-b286-4acd-9d4b-fb3258b49sdf</Id>
<Children>
<Document>
<Name>doc.pdf</Name>
<Id>d37cd13d-0bc2-467f-88bb-ce2f08c0fjjj</Id>
</Document>
</Children>
<DocumentAttributes>
<Data>
<MainDocument>
<general_structure_authorText>
<number_doc>number</number_doc>
<date_doc>2021-08-06</date_doc>
<doc_author>author</doc_author>
</general_structure_authorText>
</MainDocument>
</Data>
</DocumentAttributes>
</Document>
</Children>
</Document>
<Document>
<Name>Doc2</Name>
<Id>2e0087ed-717f-4e01-a12a-eadfac0c761</Id>
<Children>
<Document>
<Name>docChild2</Name>
<Id>6bd00d96-b286-4acd-9d4b-fb3253b49sdf</Id>
<Children>
<Document>
<Name>doc2.pdf</Name>
<Id>d37cd13d-0bc2-467f-88bb-ce2f0850fjjj</Id>
</Document>
</Children>
<DocumentAttributes>
<Data>
<MainDocument>
<general_structure_authorMax>
<number_doc>number2</number_doc>
<date_doc>2021-08-06</date_doc>
<doc_author>
<name>name</name>
<email>email</email>
</doc_author>
</general_structure_authorMax>
</MainDocument>
</Data>
</DocumentAttributes>
</Document>
</Children>
</Document>
</DocumentRoot>
VS с помощью WSDL (веб-ссылки в VS) создал следующий класс (для части XML, что мне нужно обновить).:
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.8.3761.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://ns.essk.gov.spb.ru/smev/essk")]
public partial class DocumentAttributes
{
private object dataField;
private object schemaField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
public object Data
{
get
{
return this.dataField;
}
set
{
this.dataField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(IsNullable = true)]
public object Schema
{
get
{
return this.schemaField;
}
set
{
this.schemaField = value;
}
}
}
If i use this class i get XmlNode in DocumentAttributes.Data. I was trying write extend classe for Data like this:
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public class MainDocument
{
private ExpertizaIRDDopInfo _data;
[System.Xml.Serialization.XmlElementAttribute("general_structure_authorText", typeof(ExpertizaIRDDopInfo))]
public ExpertizaIRDDopInfo Item
{
get
{
return this._data;
}
set
{
this._data = value;
}
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public class ExpertizaIRDDopInfo
{
private string _number;
private DateTime _date;
private string _author;
public string number_doc
{
get
{
return this._number;
}
set
{
this._number = value;
}
}
public DateTime date_doc
{
get
{
return this._date;
}
set
{
this._date = value;
}
}
public string doc_author
{
get
{
return this._author;
}
set
{
this._author = value;
}
}
}
And replace object to MainDocument in
public object Data
but in this case i get null in Data property.
Is the way to extend wsdl classes or i must use object and XmlNode?
Я также пытался создавать классы с помощью paste special в VS и использовать их вместо объекта, но я также получаю null. Возможно, Soap в .net не может использовать пользовательский класс для десериализации ответа с сервера. Только с помощью WSDL?
P.S.
Приведенный выше код является примером. Нет никакого способа показать весь код. Это клиентская сторона.