J'utilise le DataContractJsonSerializer pour convertir une chaîne JSON dans une classe, mais toujours renvoyer un objet vide. J'ai testé la chaîne avec l'extension 'JSON Viewer' dans le Bloc-notes, est valide. J'ai recherché un bug pendant longtemps et j'ai comparé d'autres exemples.DataContractJsonSerializer ne fonctionne pas
Ceci est ma chaîne JSON sous une forme abrégée:
{
"error":[],
"result": {
"BCH": {"aclass":"currency","altname":"BCH","decimals":10,"display_decimals":5},
"DASH": {"aclass":"currency","altname":"test"}
}
}
Les classes GetAssetInfoResponse et assetinfo contiennent des propriétés avec DataMember attributs, mais la propriété Résultat (après Deserialize) ne contient pas tous les objets.
[DataContract]
[KnownType(typeof(AssetInfo))]
public class GetAssetInfoResponse
{
[DataMember(Name = "error")]
public List<string> Error { get; set; }
[DataMember(Name = "result")]
public List<Dictionary<string, AssetInfo>> Result { get; set; }
}
[DataContract]
public class AssetInfo
{
/// <summary>
/// Alternate name.
/// </summary>
[DataMember(Name = "altname")]
public string Altname { get; set; }
/// <summary>
/// Asset class.
/// </summary>
[DataMember(Name = "aclass")]
public string Aclass { get; set; }
/// <summary>
/// Scaling decimal places for record keeping.
/// </summary>
[DataMember(Name = "decimals")]
public int Decimals { get; set; }
/// <summary>
/// Scaling decimal places for output display.
/// </summary>
[DataMember(Name = "display_decimals")]
public int DisplayDecimals { get; set; }
}
Ceci est mon code de test:
var stream = new MemoryStream(Encoding.Unicode.GetBytes(strName))
{
Position = 0
};
var serializer = new DataContractJsonSerializer(typeof(GetAssetInfoResponse));
GetAssetInfoResponse test = (GetAssetInfoResponse)serializer.ReadObject(stream);
Console.ReadLine();
Je ne peux pas utiliser le Newtonsoft.Json l'extension parce que le projet ne doit pas contenir de dépendances externes. Existe-t-il un autre moyen de transférer des chaînes JSON dans des classes?
Merci pour votre temps
Merci! Maintenant ça marche. – patbec