Als mein Objekt JSON spezifische Namensgebung hat, kam ich mit dies als eine Alternative:
public static dynamic ToDynamic(this object obj)
{
var json = JsonConvert.SerializeObject(obj);
return JsonConvert.DeserializeObject(json, typeof(ExpandoObject));
}
Für mich sind die Ergebnisse hat super funktioniert:
Modell:
public partial class Settings
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("runTime")]
public TimeSpan RunTime { get; set; }
[JsonProperty("retryInterval")]
public TimeSpan RetryInterval { get; set; }
[JsonProperty("retryCutoffTime")]
public TimeSpan RetryCutoffTime { get; set; }
[JsonProperty("cjisUrl")]
public string CjisUrl { get; set; }
[JsonProperty("cjisUserName")]
public string CjisUserName { get; set; }
[JsonIgnore]
public string CjisPassword { get; set; }
[JsonProperty("importDirectory")]
public string ImportDirectory { get; set; }
[JsonProperty("exportDirectory")]
public string ExportDirectory { get; set; }
[JsonProperty("exportFilename")]
public string ExportFilename { get; set; }
[JsonProperty("jMShareDirectory")]
public string JMShareDirectory { get; set; }
[JsonIgnore]
public string Database { get; set; }
}
ich es auf diese Weise verwendet:
private static dynamic DynamicSettings(Settings settings)
{
var settingsDyn = settings.ToDynamic();
if (settingsDyn == null)
return settings;
settingsDyn.guid = Guid.NewGuid();
return settingsDyn;
}
und erhielt dies als Ergebnis:
{
"id": 1,
"runTime": "07:00:00",
"retryInterval": "00:05:00",
"retryCutoffTime": "09:00:00",
"cjisUrl": "xxxxxx",
"cjisUserName": "xxxxx",
"importDirectory": "import",
"exportDirectory": "output",
"exportFilename": "xxxx.xml",
"jMShareDirectory": "xxxxxxxx",
"guid": "210d936e-4b93-43dc-9866-4bbad4abd7e7"
}
ich über die Geschwindigkeit nicht wissen, ich meine, es ist Serialisierung und Deserialisierung, aber für meinen Gebrauch war es großartig. Viel Flexibilität wie Verstecken mit JsonIgnore.
Hinweis: xxxxx oben ist Redaktion. :)
dynamisch bedeutet nicht, dass Sie Eigenschaften auf dem Sprung hinzufügen können. Es bedeutet, dass Sie nicht wissen, was es sein wird, also verwenden Sie dynamisch (so weit ich weiß), und der Typ wird zur Laufzeit herausgefunden. – EpicKip
Sie müssen [ExpandoObject] (https://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject (v = vs.110) .aspx) verwenden, wenn Sie Eigenschaften hinzufügen möchten. Hier ist ein [link] (http://stackoverflow.com/questions/3540161/c-sharp-4-0-dynamic-vs-expando-where-do-they-fit) mit einigen Informationen, die helfen könnten. – MaKCbIMKo