を、私が思い付きましたこれは、代替として:
public static dynamic ToDynamic(this object obj)
{
var json = JsonConvert.SerializeObject(obj);
return JsonConvert.DeserializeObject(json, typeof(ExpandoObject));
}
は、私にとってこの結果は素晴らしい仕事:
モデル:
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; }
}
が、私はこの方法でそれを使用:
private static dynamic DynamicSettings(Settings settings)
{
var settingsDyn = settings.ToDynamic();
if (settingsDyn == null)
return settings;
settingsDyn.guid = Guid.NewGuid();
return settingsDyn;
}
そして、結果としてこれを受け取っ:
{
"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"
}
私はスピードを知らない、私はそれがある意味しますシリアライズとデシリアライズがありましたが、私の使用には素晴らしいことでした。 JsonIgnoreでプロパティを隠すような柔軟性がたくさんあります。
注:上記のxxxxxは改ざんされています。 :)
動的であっても、外出先でプロパティを追加することはできません。それは、あなたが動的である(私が知る限り)ものを使用するようになるため、実行時にその型が分かるようになるかどうかわからないことを意味します。 – EpicKip
プロパティを追加する場合は、[ExpandoObject](https://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject(v = vs.110).aspx)を使用する必要があります。ここには、[リンク](http://stackoverflow.com/questions/3540161/c-sharp-4-0-dynamic-vs-expando-where-do-they-fit)が役立つかもしれない情報があります。 – MaKCbIMKo