Je repasse du JSON du côté client vers le côté serveur.Détermination du type d'objet que JSON peut désérialiser en?
if (historicalJSONAttributes != null) {
$find(ajaxManagerID).ajaxRequestWithTarget(radDock.get_uniqueID(), $.toJSON(historicalJSONAttributes));
}
ou
if (customJSONAttributes!= null) {
$find(ajaxManagerID).ajaxRequestWithTarget(radDock.get_uniqueID(), $.toJSON(customJSONAttributes));
}
A ce moment Raddock n'est pas structuré de telle sorte qu'il existe des classes dérivées attendent seulement historicalJSONAttribute ou customJSONAttribute. Les données fournies à RadDock reflètent le contenu qu'il contient. Je n'ai pas vu de raison (encore?) De structurer un contrôle parent autour de son contenu possible.
Cela me laisse la question suivante, cependant, à l'intérieur de ma classe Raddock:
public void RaisePostBackEvent(string eventArgument)
{
HandleDialogClose(eventArgument);
}
private void HandleDialogClose(string json)
{
JsonConvert.DeserializeObject<HistoricalLocalSettingsJSON>(json);
}
Je ne garantit que les données JSON transmises à HandleDialogClose est HistoricalLocalSettingsJSON. Devrais-je pré-utiliser mon eventArgument avec un indicateur pour indiquer le type de données? Y a-t-il une meilleure option sans une restructuration complète?
Merci
Mes classes:
[DataContract]
public class HistoricalLocalSettingsJSON
{
private static readonly ILog Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public HistoricalLocalSettingsJSON() { }
public HistoricalLocalSettingsJSON(string commandName, string dockID, string refreshEnabled, string refreshInterval, string chartType, string timeRestrictionEnabled, string timeStart, string timeEnd, string dataPointsEnabled)
{
Logger.InfoFormat("Command Name: {0}, DockID: {1}, RefreshEnabled: {2}, RefreshInterval: {3}, ChartType: {4}, TimeRestrictionEnabled: {5}, TimeStart: {6}, TimeEnd: {7}, DataPointsEnabled: {8}",
commandName, dockID, refreshEnabled, refreshInterval, chartType, timeRestrictionEnabled, timeStart, timeEnd, dataPointsEnabled);
CommandName = commandName;
DockID = dockID;
RefreshEnabled = bool.Parse(refreshEnabled);
RefreshInterval = int.Parse(refreshInterval);
ChartType = (Charts)Enum.Parse(typeof(Charts), chartType);
TimeRestrictionEnabled = bool.Parse(timeRestrictionEnabled);
TimeStart = timeStart;
TimeEnd = timeEnd;
DataPointsEnabled = !string.IsNullOrEmpty(dataPointsEnabled) ? bool.Parse(dataPointsEnabled) : false;
}
[DataMember(Name = "CommandName")]
public string CommandName { get; set; }
[DataMember(Name = "DockID")]
public string DockID { get; set; }
[DataMember(Name = "RefreshEnabled")]
public bool RefreshEnabled { get; set; }
[DataMember(Name = "RefreshInterval")]
public int RefreshInterval { get; set; }
[DataMember(Name = "ChartType")]
public Charts ChartType { get; set; }
[DataMember(Name = "TimeRestrictionEnabled")]
public bool TimeRestrictionEnabled { get; set; }
[DataMember(Name = "TimeStart")]
public string TimeStart { get; set; }
[DataMember(Name = "TimeEnd")]
public string TimeEnd { get; set; }
[DataMember(Name = "DataPointsEnabled")]
public bool DataPointsEnabled { get; set; }
}
[DataContract]
public class CustomLocalSettingsJSON
{
private static readonly ILog Logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public CustomLocalSettingsJSON() { }
public CustomLocalSettingsJSON(string commandName, string dockID, string refreshEnabled, string refreshInterval, string chartType)
{
Logger.InfoFormat("Command Name: {0}, DockID: {1}, RefreshEnabled: {2}, RefreshInterval: {3}, ChartType: {4}",
commandName, dockID, refreshEnabled, refreshInterval, chartType);
CommandName = commandName;
DockID = dockID;
RefreshEnabled = bool.Parse(refreshEnabled);
RefreshInterval = int.Parse(refreshInterval);
ChartType = (Charts)Enum.Parse(typeof(Charts), chartType);
}
[DataMember(Name = "CommandName")]
public string CommandName { get; set; }
[DataMember(Name = "DockID")]
public string DockID { get; set; }
[DataMember(Name = "RefreshEnabled")]
public bool RefreshEnabled { get; set; }
[DataMember(Name = "RefreshInterval")]
public int RefreshInterval { get; set; }
[DataMember(Name = "ChartType")]
public Charts ChartType { get; set; }
}
En l'état actuel CustomLocalSettingsJSON est une sous-section de HistoricalLocalSettingsJSON.
Lecture à propos des propriétés Populate et SubType maintenant. Je ne suis pas sûr à 100% que je veux créer la dépendance que CustomLocalSettingsJSON est une sous-section de HistoricalLocalSettingsJSON. La déclaration est vraie actuellement, mais rien n'empêche le boss de changer d'avis plus tard et je détesterais perdre beaucoup de travail en faisant cette supposition. Merci pour les pointeurs. :) –
Voir modifier .. une autre pensée pour un moyen général de le gérer. Vous pouvez sérialiser deux fois les données et les transmettre en tant que chaîne dans un objet général. Cela permet au code du serveur de se désintégrer de manière cohérente, puis d'utiliser l'heure correcte de l'objet pour la désérialisation finale des données. –
Merci pour cela. Cela semble bon et plus intuitif. Je vais l'utiliser. :) –