Десериализация ключей YAML с дефисами в объект класса C#C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Десериализация ключей YAML с дефисами в объект класса C#

Сообщение Anonymous »

У меня есть следующая структура yaml:

Код: Выделить всё

cosmetics:
cosmeticname:
type: item

price-lore:
- ""
- "&8> &7Price: &a%price%"
- ""
- "&8> &7Click to purchase this cosmetic."
Когда я пытаюсь десериализовать это в следующий класс:

Код: Выделить всё

    public class CosmeticList
{
[JsonProperty("cosmetics")]
public Dictionary Cosmetics { get; set; }

public void LoadFromFile()
{
if (!File.Exists(@"cosmetics.yml"))
{
throw new FileNotFoundException("Cosmetics file not found!");
}

var reader = new StreamReader(@"cosmetics.yml");
string ymlstring = reader.ReadToEnd();
var yaml = new YamlStream();
yaml.Load(new StringReader(ymlstring));
var root = (YamlMappingNode)yaml.Documents[0].RootNode;

if (!root.Children.TryGetValue(new YamlScalarNode("cosmetics"), out var cosmeticsNode))
{
throw new Exception("Missing 'cosmetics' section in YAML file.");
}

var serializer = new SerializerBuilder()
.WithNamingConvention(UnderscoredNamingConvention.Instance)
.Build();
var deserializer = new DeserializerBuilder()
.WithNamingConvention(UnderscoredNamingConvention.Instance)
.IgnoreUnmatchedProperties()
.Build();

var cosmeticsYaml = serializer.Serialize(cosmeticsNode);

Cosmetics = deserializer.Deserialize(cosmeticsYaml);
}
}

public class Cosmetic
{
[JsonProperty("type")]
public string Type { get; set; }

[JsonProperty("price-lore")]
public string[] PriceLore { get; set; }
}

Это работает для всех ключей yaml, кроме тех, которые имеют тире в имени ключа. Я пробовал некоторые вещи, например добавление .WithNamingConvention, но проблемы не исчезли.
Кто-нибудь знает, как я могу это исправить? Я бы предпочел не менять для этого структуру yaml.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ct-c-sharp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»