sur des types de valeur nullables lors de la sérialisation à XML - Retrouvez les réponses et les commentaires concernant cette question" />
11
votes

Empêcher sur des types de valeur nullables lors de la sérialisation à XML

J'ai ajouté des types de valeur nullables à ma classe sérialisable. J'effectue une série de sérialisation à l'aide de xmlSerializer mais lorsque la valeur est définie sur null , je reçois un nœud vide avec xsi: nil = "vrai" . C'est le comportement correct que j'ai trouvé sur XSI: NIL Attribute Binding Support .

Y a-t-il un moyen d'éteindre cette option afin que rien ne soit émis lorsque le type de valeur est null ?


0 commentaires

6 Réponses :



4
votes

J'ai trouvé que le public bool abcspécifié était le seul qui a fonctionné avec .NET 4.0. J'ai aussi dû ajouter le xmlignoreattribute

Voici ma solution complète pour supprimer une chaîne nommée ABC dans le fichier de référence Web de référence.cs: xxx


1 commentaires

Xmlignoreattribute sur une propriété "spécifiée" n'est pas nécessaire, ainsi que d'un setter sur la même propriété.



1
votes

Toutes les méthodes méta comme spécifié ou devraient omettre est juste une mauvaise conception de programmation de la structure Microsoft .NET XML. Il devient encore plus compliqué si vous n'avez pas accès direct aux classes que vous souhaitez sérialiser.

dans leur méthode de sérialisation, il ne devrait qu'ajouter un attribut comme "ignorenoulelable".

My Solution actuelle Serialise le xml et ensuite supprime tous les nœuds ayant nil = "vrai" à l'aide de la fonction suivante. xxx


0 commentaires

1
votes

C'est probablement la réponse la moins sophistiquée, mais je l'ai résolu pour moi avec une simple chaîne remplacer.

.replace ("XSI: nil = \" vrai \ "", ""); P>

Je suis sérialisé à la chaîne d'abord de toute façon. Je peux enregistrer dans le fichier plus tard. P>

Il garde toutes mes xmlwrittersetters intacts. Une autre solution que je l'ai trouvée, je l'ai trouvée.) P>

    private static string Serialize<T>(T details)
    {
        var serializer = new XmlSerializer(typeof(T));
        using (var ms = new MemoryStream())
        {
            var settings = new XmlWriterSettings
            {
                Encoding = Encoding.GetEncoding("ISO-8859-1"),
                NewLineChars = Environment.NewLine,
                ConformanceLevel = ConformanceLevel.Document,
                Indent = true,
                OmitXmlDeclaration = true
            };

            using (var writer = XmlWriter.Create(ms, settings))
            {
                serializer.Serialize(writer, details);
                return Encoding.UTF8.GetString(ms.ToArray()).Replace(" xsi:nil=\"true\" ", "");
            }
        }
    }


0 commentaires

4
votes

Je devais ajouter un oséraliser la méthode à chaque valeur nullable. XXX


0 commentaires

0
votes

Je l'ai accompli de cette façon: xxx


0 commentaires