В C # префикс имени переменной с @
- это просто способ использовать зарезервированные слова в качестве имен переменных. Например, вы можете сделать это:
var @class = "foo";
Если вы не используете @
, вы получите ошибку компилятора. Таким образом, при сериализации динамических объектов имя переменной все еще равно Timestamp
. Лучшим вариантом будет использовать конкретный класс для хранения ваших данных. Вы можете не только управлять именами при сериализации, но и получать безопасность типа времени компиляции, и это намного быстрее, чем использование dynamic
(каждый раз, когда вы используете dynamic
, котенок умирает!)
Итак, я бы создал два класса, подобных этому:
//Root class so you don't need to serialise an anonymous type and can easily deserialise later
public class Root
{
public List<Document> Documents { get; set; }
}
public class Document
{
public string Index { get; set; }
public string Type { get; set; }
public string Id { get; set; }
public string Title { get; set; }
//This attribute controls the JSON property name
[JsonProperty("@Timestamp")]
public string Timestamp { get; set; }
}
И сериализовать что-то вроде этого:
var root = new Documents();
root.Documents = new List<Document>
{
new Document
{
Index = ""index-name-test",
Type = "doc",
Id = g.ToString(),
Title = "title1",
Timestamp = DateTime.UtcNow
}
};
var json = JsonConvert.SerializeObject(root);