У вас есть пара возможностей (как уже было показано в других ответах). Другой возможностью было бы использовать свойства JObject
и JProperty
, предоставленные Json.Net, для того, чтобы непосредственно получить значение, подобное этому:
var jsonObject = (JObject)JsonConvert.DeserializeObject(json);
var unashamedohio = (JObject)(jsonObject.Property("unashamedohio").Value);
var summonerLevel = unashamedohio.Property("summonerLevel");
Console.WriteLine(summonerLevel.Value);
Еще одна возможность заключалась бы в создании типизированного модель структуры JSON:
public class AnonymousClass
{
public UnashamedOhio unashamedohio { get; set; }
}
public class UnashamedOhio
{
public int summonerLevel { get; set; }
}
и использовать ее для извлечения значения:
var ao = JsonConvert.DeserializeObject<AnonymousClass>(json);
Console.WriteLine(ao.unashamedohio.summonerLevel);
Оба решения печатают одно и то же значение: 30
.
IMO вы должны использовать всегда набранные модели, когда это возможно, и если вы делаете много полезной информации из структур JSON. Он обеспечивает проверку ошибок в среде IDE (в отличие от динамической), которая выплачивается во время выполнения.
Я был бы очень соответствующим о создании нагрузки передающих электронных писем на моем сервере базы данных (маленький, хотя это может быть). Я мог бы предложить одну из этих альтернатив:
Если у вас запущена служба SMTP, вы можете отправить ее в папку для удаления. Если у вас большой объем, вы можете получить дубликаты имен файлов, но есть способы избежать этого.
В противном случае вам нужно будет создать UDF.
Вот пример решения триггера:
CREATE TRIGGER test.autosendfromdrop BEFORE INSERT ON test.emaildrop
FOR EACH ROW BEGIN
/* START THE WRITING OF THE EMAIL FILE HERE*/
SELECT concat("To: ",NEW.To),
concat("From: ",NEW.From),
concat("Subject: ",NEW.Subject),
NEW.Body
INTO OUTFILE
"C:\\inetpub\\mailroot\\pickup\\mail.txt"
FIELDS TERMINATED by '\r\n' ESCAPED BY '';
END;
Для разметки тела сообщения вам понадобится что-то вроде этого ...
CREATE FUNCTION `HTMLBody`(Msg varchar(8192))
RETURNS varchar(17408) CHARSET latin1 DETERMINISTIC
BEGIN
declare tmpMsg varchar(17408);
set tmpMsg = cast(concat(
'Date: ',date_format(NOW(),'%e %b %Y %H:%i:%S -0600'),'\r\n',
'MIME-Version: 1.0','\r\n',
'Content-Type: multipart/alternative;','\r\n',
' boundary=\"----=_NextPart_000_0000_01CA4B3F.8C263EE0\"','\r\n',
'Content-Class: urn:content-classes:message','\r\n',
'Importance: normal','\r\n',
'Priority: normal','\r\n','','\r\n','','\r\n',
'This is a multi-part message in MIME format.','\r\n','','\r\n',
'------=_NextPart_000_0000_01CA4B3F.8C263EE0','\r\n',
'Content-Type: text/plain;','\r\n',
' charset=\"iso-8859-1\"','\r\n',
'Content-Transfer-Encoding: 7bit','\r\n','','\r\n','','\r\n',
Msg,
'\r\n','','\r\n','','\r\n',
'------=_NextPart_000_0000_01CA4B3F.8C263EE0','\r\n',
'Content-Type: text/html','\r\n',
'Content-Transfer-Encoding: 7bit','\r\n','','\r\n',
Msg,
'\r\n','------=_NextPart_000_0000_01CA4B3F.8C263EE0--'
) as char);
RETURN tmpMsg;
END ;
Я согласен с Джимом Близардом. База данных не является частью вашего технологического стека, которая должна отправлять электронные письма. Например, что если вы отправите электронное письмо, но затем откатите изменение, которое вызвало это электронное письмо? Вы не можете забрать письмо обратно.
Лучше отправить электронное письмо на уровне кода приложения, после того, как ваше приложение подтвердило, что изменение SQL было успешно выполнено и зафиксировано.