Erreur lors de la désérialisation du fichier XML dans un objet: la chaîne d'entrée System.FormatException n'était pas au format correct
Bonjour et merci d'avance pour l'aide.
Je rencontre un problème lorsque vous essayez de désérialiser un XElement dans un objet à l'aide d'un XmlSerializer et un StringReader. Mon code pour désérialiser est-ce:
/*deseierialize a single RegisterServerObject instance from xml*/
static RegisterServerObject DeserializeSingleServerFromXml(XElement serverElement)
{
XmlSerializer deserializer = new XmlSerializer(typeof(RegisterServerObject));
RegisterServerObject server;
using (var reader = new StringReader(serverElement.ToString()))
server = (RegisterServerObject)deserializer.Deserialize(reader);
return server;
}
Je sais que le contenu du lecteur, comme l'a révélé par l'exception:
<Server>
<ServerID>11</ServerID>
<GroupID />
<ParentID>15</ParentID>
<ServerName>IAProd1</ServerName>
<User>admin</User>
<UID>123</UID>
<PWD>password</PWD>
<Domain>InputAccel</Domain>
<Location>Left</Location>
<AssociatedModules>
<Module>
<ModId>1</ModId>
<ServerId>11</ServerId>
<ModName>TestModA</ModName>
<ModuleStatus>1</ModuleStatus>
</Module>
<Module>
<ModId>2</ModId>
<ServerId>11</ServerId>
<ModName>TestModB</ModName>
<ModuleStatus>1</ModuleStatus>
</Module>
<Module>
<ModId>9</ModId>
<ServerId>11</ServerId>
<ModName>TestModI</ModName>
<ModuleStatus>1</ModuleStatus>
</Module>
<Module>
<ModId>10</ModId>
<ServerId>11</ServerId>
<ModName>TestModJ</ModName>
<ModuleStatus>1</ModuleStatus>
</Module>
</AssociatedModules>
</Server>
Et mon RegisterServerObject classe se présente comme suit:
[XmlRoot("Server")]
public class RegisterServerObject
{
public RegisterServerObject() { }
public int ServerID { get; set; }
public int GroupID { get; set; }
public int ParentID { get; set; }
public string ServerName { get; set; }
public string User { get; set; }
public int Uid { get; set; }
public string Domain { get; set; }
public string Location { get; set; }
public List<RegisterModuleObject> AssociatedModules { get; set; }
}
Et au risque de la surcharge d'information l'exception exacte message que je reçois est: est-ce
System.InvalidOperationException: There is an error in XML document (4, 4). ---> System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.Xml.XmlConvert.ToInt32(String s)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderRegisterServerObject.Read3_RegisterServerObject(Boolean isNullable, Boolean checkType)
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderRegisterServerObject.Read4_Server()
--- End of inner exception stack trace ---
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, Object events)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)
at System.Xml.Serialization.XmlSerializer.Deserialize(TextReader textReader)
at SL_xMonitor_Frontend_RefactorV1.Views.RegisteringNewChildWindowV2.DeserializeSingleServerFromXml(XElement serverElement)
at SL_xMonitor_Frontend_RefactorV1.Views.RegisteringNewChildWindowV2.modXmlClient_getAssociatedModulesCompleted(Object sender, getAssociatedModulesCompletedEventArgs e)
at SL_xMonitor_Frontend_RefactorV1.XMLServersAndModulesServiceReference.XMLTablesAndModulesServiceClient.OngetAssociatedModulesCompleted(Object state)}
Il semble y avoir un problème avec la conversion de la valeur d'un élément xml, ParentID peut-être, dans un int pour instancier la classe, mais je ne suis pas sûr pourquoi ce serait. Je vous remercie d'avance pour l'aide!
source d'informationauteur Christian
Vous devez vous connecter pour publier un commentaire.
Le problème est que la propriété
GroupID
est déclaré comme un entier, mais sa valeur est vide (<GroupID/>
). Une solution est de modifier le XML, de sorte que la valeur de l'élément est un entier valide:Une autre solution serait de désérialiser cette valeur comme une chaîne, et de le convertir en un nombre entier de laquelle les utilisateurs de type peut consommer:
Vous devez d'abord créer
XmlIgnore
attribut pourGroupID
propriétéensuite, vous pouvez créer de la carte que vous allez utiliser pour la désérialisation:
et finalement, j'ai modifié
DeserializeSingleServerFromXml
méthode un peuPourrait-il être le GroupID que c'est d'avoir des problèmes avec. Depuis pas de valeur pour le GroupID est prévu, je crois qu'il essaie de passer comme un
string.Empty
qui, évidemment, ne serait pas définie à uneint
propriété.Vous pouvez essayer les suivantes:
.