J'ai un fichier XML. Je veux le mapper à un objet. l'un des éléments xml est une chaîne et je veux convertir cette chaîne en valeur int d'une section Enum in set de la propriété. puis renvoyer cette valeur int, mais lorsque le lecteur de fichiers veut désérialiser mon fichier XML à objet, je reçois une erreur d'exécution qui indique "Il y a une erreur dans le document XML (30, 10)".'Une erreur s'est produite dans le document XML (30, 10)' lors du renvoi du type de différence du type d'élément XML
private int processCodeInt;
[XmlElement("ProcessCode")]
public int ProcessCode
{
get { return this.processCodeInt; }
set
{
var temp = typeof(Common.Transaction.Definition_Transaction.Def_TrxType_Detail)
.GetMembers().Where(i => i.MemberType == MemberTypes.Field).ToList();
this.processCodeInt = Convert.ToInt32(temp.Where(u => u.Name == value.ToString()).FirstOrDefault().ToString());
}
}
Merci à tous.
dans le suivi, je laisse mon code:
cours de cartographie:
[XmlRoot("Model")]
public class Model
{
[XmlElement("Transaction")]
public List<Transaction> Transactions;
}
public class Transaction
{
[XmlElement("Message")]
public List<Message> Messages;
}
public class Message
{
[XmlElement("In")]
public MessageType In { get; set; }
[XmlElement("Out")]
public MessageType Out { get; set; }
}
public class MessageType
{
[XmlElement("ChannelType")]
public int ChannelType { get; set; }
[XmlElement("TransactionType")]
public int TransactionType { get; set; }
private int processCodeInt;
[XmlElement("ProcessCode")]
public int ProcessCode
{
get { return this.processCodeInt; }
set
{
var temp = typeof(Common.Transaction.Definition_Transaction.Def_TrxType_Detail)
.GetMembers().Where(i => i.MemberType == MemberTypes.Field).ToList();
temp.RemoveAt(0);
MemberInfo[] processCodeMemberInfos = temp.ToArray();
this.processCodeInt = Convert.ToInt32(processCodeMemberInfos.Where(u => u.Name == value.ToString()).FirstOrDefault().ToString());
}
}
[XmlElement("IsExpired")]
public bool IsExpired { get; set; }
}
mon fichier XML:
<?xml version="1.0" encoding="utf-8" ?>
<Model>
<Transaction>
<Message>
<In>
<ChannelType>0</ChannelType>
<TransactionType>1</TransactionType>
<ProcessCode>Balance</ProcessCode>
<IsExpired>0</IsExpired>
</In>
<Out>
<ChannelType>1</ChannelType>
<TransactionType>1</TransactionType>
<ProcessCode>Balance</ProcessCode>
<IsExpired>0</IsExpired>
</Out>
</Message>
</Transaction>
</Model>
Code de cartographie:
var TransactionModelsFile = new System.IO.StreamReader(System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)
[email protected]"/TransactionModels.xml");
System.Xml.Serialization.XmlSerializer reader =
new System.Xml.Serialization.XmlSerializer(typeof(Model));
overview = (Model)reader.Deserialize(TransactionModelsFile);
TransactionModelsFile.Close();
Pourquoi '' ProcessCode' est int' alors que la valeur réelle est 'Balance'? –
@Alex merci pour votre commentaire, s'il vous plaît voir la partie ensemble de la propriété processcode, je veux convertir la valeur de chaîne Enum à Int de ce membre. –
Vous pouvez faire n'importe quoi, mais 'ProcessCode' est int, donc votre code ne sera pas appelé tant que value n'est pas' string'. Donc, utilisez Enums (AFAIK ils sont désérialisés correctement par leur nom), ou chaîne, puis utilisez vos getters et setters pour obtenir un résultat. –