Ma chaîne JSON, y compris un en-tête de type fixe et le corps de type non fixe comme ci-dessous:Comment désérialiser JSON avec un en-tête de type fixe et un corps de type variant en C#?
[DataContract]
public class ServiceResponseHeader
{
[DataMember]
public string ErrorCode { get; set; }
[DataMember]
public string Message { get; set; }
}
[DataContract]
public class ServiceResponse
{
[DataMember]
public ServiceResponseHeader Header { get; set; }
[DataMember]
public object Body { get; set; }
}
Lors de l'exécution, je peux obtenir le type de corps du fichier de configuration, mais comment puis-je desterilize JSON à l'objet type spécifié via DataContractJsonSerializer.ReadObject()?
L'exemple de code:
string json = @"{ "Header": {"ErrorCode":"0000", "Message":"Got Profile Successfully"}, "Body": [{"DisplayName":"Mike Code","PictureUrl":null,"Title":"Manager"}] }"
Type objType = Type.GetType("MyAssembly.MyTypeName"); //Get Type from configuration file
ServiceResponse obj = new ServiceResponse()
{
Header = new ServiceResponseHeader(),
Body = Activator.CreateInstance(objType)
};
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
ServiceResponse returnObj = (ServiceResponse)serializer.ReadObject(ms);
}
Ici, je peux obtenir en-tête (returnObj.Header.Message) correctement, mais returnObj.Body est pas le type de MyAssembly.MyTypeName et je ne peux pas obtenir ses propriétés.
Des suggestions pour résoudre ce problème?
essayez "dynamique" si vous utilisez .net 4.0 –
cela peut aider si le corps est différents types d'objets qui peuvent être déterminés par quelque chose dans l'en-tête. http://stackoverflow.com/questions/8241392/deserializing-heterogenous-json-array-into-covariant-list-using-json-net/12727186#12727186 – JimSan