Tag: yamldotnet

如何使用YamlDotNet将JSON转换为YAML

我正在尝试使用YamlDotNet将JSON转换为YAML。 这是我的代码: class Program { static void Main(string[] args) { var json = “{\”swagger\”:\”2.0\”,\”info\”:{\”title\”:\”UberAPI\”,\”description\”:\”MoveyourappforwardwiththeUberAPI\”,\”version\”:\”1.0.0\”},\”host\”:\”api.uber.com\”,\”schemes\”:[\”https\”],\”basePath\”:\”/v1\”,\”produces\”:[\”application/json\”]}”; var swaggerDocument = JsonConvert.DeserializeObject(json); var serializer = new YamlDotNet.Serialization.Serializer(); using (var writer = new StringWriter()) { serializer.Serialize(writer, swaggerDocument); var yaml = writer.ToString(); Console.WriteLine(yaml); } } } 这是我提供的JSON: { “swagger”:”2.0″, “info”:{ “title”:”UberAPI”, “description”:”MoveyourappforwardwiththeUberAPI”, “version”:”1.0.0″ }, “host”:”api.uber.com”, “schemes”:[ “https” ], “basePath”:”/v1″, “produces”:[ “application/json” […]

从c#动态构建Yaml文档

是否可以使用Yaml.DotNet或其他库从c#动态构建Yaml文档? 我理解如何使用序列化来完成,但是这需要从对象结构开始。 我正在寻找一种方法来动态创建Yaml文档节点,就像使用XElement.Add(object)方法的Xml一样。

使用自定义类型解析器

我目前正在尝试使用YamlDotNet库将YAML文档反序列化为标准.NET对象,例如标量值的Dictionary和用于映射的Dictionary 。 我猜Deserializer类是最好的选项,但它的输出是object和Dictionary 。 我试着像这样实现自定义的INodeTypeResolver : class MyNodeTypeReslover : INodeTypeResolver { bool INodeTypeResolver.Resolve(NodeEvent nodeEvent, ref Type currentType) { if (currentType == typeof(object)) { if (nodeEvent is SequenceStart) currentType = typeof(List); else if (nodeEvent is MappingStart) currentType = typeof(Dictionary); else if (nodeEvent is Scalar) currentType = typeof(string); return true; } return false; } } 并像这样使用它: Deserializer […]

反序列化数据的YAML“表”

我使用yamldotnet和c#来反序列化由第三方软件应用程序创建的文件。 以下YAML文件示例均在应用程序中有效: #File1 Groups: – Name: ATeam FirstName, LastName, Age, Height: – [Joe, Soap, 21, 184] – [Mary, Ryan, 20, 169] – [Alex, Dole, 24, 174] #File2 Groups: – Name: ATeam FirstName, LastName, Height: – [Joe, Soap, 184] – [Mary, Ryan, 169] – [Alex, Dole, 174] 请注意,File2没有任何Age列,但反序列化器仍必须识别每行的第三个值是高度而不是年龄。 这些数据应该代表一个人的表。 以File1为例,Mary Ryan年仅20岁,身高169厘米。 反序列化器需要理解它具有的列(对于File2,它只有FirstName,LastName和Height)并相应地将数据存储在正确的对象中:Mary Ryan高169厘米。 类似地,程序文档声明列的顺序并不重要,因此下面的File3是一种同样有效的方式来表示File2中的数据,即使Height现在是第一个: #File3 Groups: […]

寻求使用C#读取.yaml文件的指导

两个月后:我试图解析的YAML(Eve Online blueprint.yaml)文件改变了大量的交易,这也使得使用de deserializer更容易解析。 如果某人(无论出于何种原因)想要查看代码,请在https://github.com/hkraal/ParseYaml上更新 根据Steve Wellens的评论,我已经调整了代码,以便一次做更少的事情。 错误本身并不重要。 我在我的解决方案中创建了另一个项目(Example1)来测试我之前引用的aaubry.net上的实际示例。 当使用“动态”键导致我当前的结论时,它给了我同样的错误:两者之间存在差异: items: – part_no: A4786 和 items: part_no: A4786 第一个是在我(错误地)假设我可以应用于使用第二种语法的.yaml文件的示例中使用的。 现在,我仍然可以找到如何使用我的yaml文件中使用的语法来获取密钥的“子元素”… 当C#在工作中使用时,我开始考虑一个很好的项目来学习语言的各个方面,同时有一个直接的目标来努力。 但是我在解析Yaml文件的项目中很早就打到了我的第一面墙。 我的目标是创建YamlBlueprint.cs中定义的YamlBlueprint对象列表,但我甚至没有到达Yaml文件的末尾。 我在github上设置了一个测试用例来演示这个问题: https : //github.com/hkraal/ParseYaml http://www.aaubry.net/page/YamlDotNet-Documentation-Loading-a-YAML-stream上的示例可以运行,直到我想循环这些项目。 基于我所看到的,我应该能够将myKey作为参数提供给YamlScalarNode()来访问它下面的项目。 var items = (YamlSequenceNode)mapping.Children[new YamlScalarNode(myKey)]; 如果我这样做,我会得到以下错误: An unhandled exception of type ‘System.InvalidCastException’ occurred in yamldotnet.exe Additional information: Unable to cast object of type ‘YamlDotNet.RepresentationModel.YamlMappingNode’ to type […]