私は、jsonファイルにメール設定を保存したいというアプリがあります。JsonConvert.DeserializeObject <T> nullを返す
JSONファイルは、次のようになります。
{
"Id": 1,
"From": "[email protected]",
"Password": "mypassword",
"Port": 587,
"To": "[email protected]",
"SmtpAddress": "smtp.office365.com",
"TargetName": "STARTTLS/smtp.office365.com"
}
とC#のコードは次のようになります。
public class EmailModel
{
[JsonProperty(nameof(Id))]
public int Id { get; set; }
[JsonProperty(nameof(To))]
public string To { get; set; }
[JsonProperty(nameof(From))]
public string From { get; set; }
[JsonProperty(nameof(Port))]
public int Port { get; set; }
[JsonProperty(nameof(Password))]
public string Password { get; set; }
[JsonProperty(nameof(SmtpAddress))]
public string SmtpAddress { get; set; }
[JsonProperty(nameof(TargetName))]
public string TargetName { get; set; }
}
と同じように見えアクセス:私はこのために多くの記事を見てきました
public EmailModel EmailModel(int id)
{
var filePath = AppDomain.CurrentDomain.BaseDirectory;
using (var sr = new StreamReader(Path.Combine(filePath,"appsettings.json")))
{
string json = sr.ReadToEnd();
return JsonConvert.DeserializeObject<EmailModel>(json);
}
}
しかし、どれもうまくいかないようです。私は追加しました
var settings = new JsonSerializerSettings();
settings.MetadataPropertyHandling = MetadataPropertyHandling.Ignore;
EmailModelクラスで、まだすべての私の値はnullのままです。
"{\r\n \"EmailModel\": {\r\n \"Id\": 1,\r\n \"From\": \"myemail\",\r\n \"Password\": \"myPassword\",\r\n \"Port\": 587,\r\n \"To\": \"myEmail\",\r\n \"SmtpAddress\": \"smtp.office365.com\",\r\n \"TargetName\": \"STARTTLS/smtp.office365.com\"\r\n }\r\n}\r\n"
}
アップデート2:私は
からのコードを変更したとき Iはappsetting.jsonからの応答を取得し、私はsr.ReadToEnd()
戻ることがわかり、この貫通
更新 デバッギング
var filePath = AppDomain.CurrentDomain.BaseDirectory;
var streamPath = Path.Combine(filePath, "appsettings.json");
string json = null;
using (var sr = new StreamReader(streamPath))
{
json = sr.ReadToEnd();
}
to:
var json = @"
{
""Id"": 1,
""From"": ""myEmail"",
""Password"": ""myPassword"",
""Port"": 587,
""To"": ""myEmail"",
""SmtpAddress"": ""smtp.office365.com"",
""TargetName"": ""STARTTLS/smtp.office365.com""
}";
私のテストは失敗します。
ファイルのパスは正しいですか?ファイルを見つけましたか? (つまり 'File.Exists(streamReader'sFilePath)'が 'true'を返すのですか?) – KAI
jsonをファイルから読み込むのではなく文字列に入れ、' nameof'を静的な文字列に置き換えるようにコードを修正すると、良い。私はKAIが示唆しているように、ファイルが正しく読み込まれていることを確認したいと思います。特に、デシリアライズを呼び出す前にjsonの値を検証する価値があります。 jsonオブジェクトがまったくない場合は、nullを取得する必要があります。存在した場合でも、一致するプロパティーが1つもない場合でも、オブジェクトは戻され、ヌルではありません。 – Chris
プロパティの名前がJsonプロパティと同じ場合、JsonProperty属性が設定されているのはなぜですか? – Gusman