Question

Je viens à la version mis à jour R275 et il ne semble pas gérer correctement les classes DataContract plus En sérialisation cette classe très simple:

[DataContract]
public class ProtoData
{
    [DataMember(Order = 1)]
    private long _id;
    [DataMember(Order = 2)]
    private string _firstName;
    [DataMember(Order = 3)]
    private string _lastName;

    public long Id
    {
        get { return _id; }
        set { _id = value; }
    }

    public string FirstName
    {
        get { return _firstName; }
        set { _firstName = value; }
    }

    public string LastName
    {
        get { return _lastName; }
        set { _lastName = value; }
    }

    public ProtoData(long id, string firstName, string lastName)
    {
        _id = id;
        _firstName = firstName;
        _lastName = lastName;
    }

    public ProtoData()
    {
    }

Je ne reçois que des cours de contrat de données (et les listes / tableaux de tels) peuvent être traitées (traitement d'erreur ProtoData)

Était-ce utile?

La solution

Vraiment? c'est étrange; Je me serais attendu les tests unitaires pour SpT un tel changement de rupture. Etes-vous sûr que vous utilisez la bonne version? Il existe une version 2.0 (qui ne pas inclure le soutien [DataContract], car cette approche est WCF, une extension 3.0) et une version 3.0 séparée. Vous voulez la version 3.0 (NET30.zip).

Testé avec succès R275 / NET30:

static void Main() {
    ProtoData pd = new ProtoData {
        FirstName = "Marc",
        LastName = "Gravell",
        Id = 23354
    }, clone;
    using (MemoryStream ms = new MemoryStream()) {
        Serializer.Serialize(ms, pd);
        Console.WriteLine(ms.Length);
        ms.Position = 0;
        clone = Serializer.Deserialize<ProtoData>(ms);            
    }
    Console.WriteLine(clone.FirstName);
    Console.WriteLine(clone.LastName);
    Console.WriteLine(clone.Id);
}

Avec la sortie:

19
Marc
Gravell
23354

Autres conseils

Effectuez les opérations suivantes:

  • Supprimer tous les membres privés
  • Utiliser les propriétés publiques

    chaîne publique LastName;

  • Marquer toutes les propriétés publiques avec [DataMember]

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top