Я пытаюсь преобразовать файл xsd в класс .net.Я много искал эту тему и нашел xsd.exe как один из способов достижения этой цели, но у меня все еще есть две проблемы
Я не хочу создавать классы вручнуюиз командной строки, но хотите, чтобы все это было сделано во время выполнения.Для этого я попытался использовать System.Diagnostics.Process для запуска xsd.exe во время выполнения, но не смог добиться успеха, а также получал мигающее окно командной строки при запуске процесса.
Я дажеНе удалось получить классы, сгенерированные из командной строки.Это выдает мне ошибку: «Схема D: \ Response.xsd не может быть проверена».
Поэтому в основном я пытаюсь реализовать что-то, что будет использовать мою строку xsd и десериализовать ее в однутипа моего класса во время выполнения, что-то вроде того, что мы делаем со строкой Xml, используя класс XmlSerializer.
Я хотел бы упомянуть, что я думаю, что моя строка xsd не относится к общим типам xsd, а является своего рода пользовательским, напримеродин из ответов:
<?xml version="1.0" encoding="iso-8859-1"?>
<serv:message xmlns:serv="http://www.webex.com/schemas/2002/06/service"
xmlns:com="http://www.webex.com/schemas/2002/06/common"
xmlns:use="http://www.webex.com/schemas/2002/06/service/user">
<serv:header>
<serv:response>
<serv:result>SUCCESS</serv:result>
<serv:gsbStatus>BACKUP</serv:gsbStatus>
</serv:response>
</serv:header>
<serv:body>
<serv:bodyContent xsi:type="use:getLoginTicketResponse"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<use:ticket>5e9733eb9efeb02d80aa0551ef7e9ccd</use:ticket>
<use:apiVersion>WebEx XML API V3.9.0</use:apiVersion>
</serv:bodyContent>
</serv:body>
</serv:message>
Редактировать - мне удалось создать файл класса для моего xml сейчас, и вот он
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.webex.com/schemas/2002/06/service/user")]
public partial class getLoginTicketResponse : bodyContentType
{
private string ticketField;
private string apiVersionField;
/// <remarks/>
public string ticket
{
get
{
return this.ticketField;
}
set
{
this.ticketField = value;
}
}
/// <remarks/>
public string apiVersion
{
get
{
return this.apiVersionField;
}
set
{
this.apiVersionField = value;
}
}
}
Иэто bodyContentType
/// <remarks/>
[System.Xml.Serialization.XmlIncludeAttribute(typeof(getLoginTicketResponse))]
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.webex.com/schemas/2002/06/service")]
[System.Xml.Serialization.XmlRootAttribute("getLoginTicket", Namespace = "http://www.webex.com/schemas/2002/06/service/user", IsNullable = false)]
public partial class bodyContentType
{
}
Теперь попробуйте сериализовать его следующим образом
var nameSpaceManager = new XmlNamespaceManager(responseXML.NameTable);
nameSpaceManager.AddNamespace("serv", "http://www.webex.com/schemas/2002/06/service");
nameSpaceManager.AddNamespace("com", "http://www.webex.com/schemas/2002/06/common");
nameSpaceManager.AddNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
nameSpaceManager.AddNamespace("meet", "http://www.webex.com/schemas/2002/06/service/meeting");
nameSpaceManager.AddNamespace("att", "http://www.webex.com/schemas/2002/06/service/attendee");
nameSpaceManager.AddNamespace("use", "http://www.webex.com/schemas/2002/06/service/user");
XmlNode statusNode = responseXML.SelectSingleNode("/serv:message/serv:body", nameSpaceManager);
TextReader reader = new StringReader(s);
XmlSerializer serializer = new XmlSerializer(typeof(getLoginTicketResponse));
var obj = serializer.Deserialize(reader);
Но продолжайте получать сообщение об ошибке «В XML-документе (1, 2) есть ошибка».Я пытался изменить многие вещи в строке XML, но не смог добиться успеха
Любая помощь будет заметна!