使用 YamlDotNet 或 SharpYaml 设置 key/class 的名称
Set name of key/class using YamlDotNet or SharpYaml
我正在尝试使用 YamlDotNet 或 SharpYaml 对以下 YAML 进行(反)序列化:
network:
IF1:
gateway4: 10.1.0.1
addresses:
- 10.1.0.10/24
- 10.1.0.20/24
IF2:
gateway4: 10.2.0.1
addresses:
- 10.2.0.10/24
- 10.2.0.20/24
我有这个 C# class:
public class NetworkConfig
{
public class Network
{
//[ClassName]
public string NetworkName { get; set; }
public List<Interface> Interfaces;
public class Interface
{
//[ClassName]
public string InterfaceName { get; set; }
public string gateway4;
public List<String> addresses;
}
}
}
实例化:
var NetworkCfg = new NetworkConfig();
var Network = new NetworkConfig.Network();
Network.NetworkName = "network";
Network.Interfaces = new List<NetworkConfig.Network.Interface> {
new NetworkConfig.Network.Interface
{
InterfaceName = "IF1",
gateway4 = "10.1.0.1",
addresses = new List<string> { "10.1.0.10/24", "10.1.0.20/24"}
},
new NetworkConfig.Network.Interface
{
InterfaceName = "IF2",
gateway4 = "10.2.0.1",
addresses = new List<string> { "10.2.0.10/24", "10.2.0.20/24"}
}
};
如何命名 key/class Network
和 Interface
?
我能想到的一个解决方案是 属性 的属性,类似于 [ClassName]
,但我一直找不到。
您的问题是您的 YAML 结构与您的 class 结构不匹配。你展示的YAML结构基本上是
Dictionary<string, Dictionary<string, Interface>>
Interface
中没有 InterfaceName
。如您所见,您的网络和接口的名称与它们所命名的对象处于另一个级别,因此您不能简单地通过注释将它们加载到对象中。
您有两个选择:
- 将 YAML 加载到上述类型中,然后post-将其处理为您的类型结构。
- 为您的类型层次结构实施自定义构造函数和表示器,将其(反)序列化为您想要的 YAML 结构。
后一种选择要快一些,但我认为这不值得。
我正在尝试使用 YamlDotNet 或 SharpYaml 对以下 YAML 进行(反)序列化:
network:
IF1:
gateway4: 10.1.0.1
addresses:
- 10.1.0.10/24
- 10.1.0.20/24
IF2:
gateway4: 10.2.0.1
addresses:
- 10.2.0.10/24
- 10.2.0.20/24
我有这个 C# class:
public class NetworkConfig
{
public class Network
{
//[ClassName]
public string NetworkName { get; set; }
public List<Interface> Interfaces;
public class Interface
{
//[ClassName]
public string InterfaceName { get; set; }
public string gateway4;
public List<String> addresses;
}
}
}
实例化:
var NetworkCfg = new NetworkConfig();
var Network = new NetworkConfig.Network();
Network.NetworkName = "network";
Network.Interfaces = new List<NetworkConfig.Network.Interface> {
new NetworkConfig.Network.Interface
{
InterfaceName = "IF1",
gateway4 = "10.1.0.1",
addresses = new List<string> { "10.1.0.10/24", "10.1.0.20/24"}
},
new NetworkConfig.Network.Interface
{
InterfaceName = "IF2",
gateway4 = "10.2.0.1",
addresses = new List<string> { "10.2.0.10/24", "10.2.0.20/24"}
}
};
如何命名 key/class Network
和 Interface
?
我能想到的一个解决方案是 属性 的属性,类似于 [ClassName]
,但我一直找不到。
您的问题是您的 YAML 结构与您的 class 结构不匹配。你展示的YAML结构基本上是
Dictionary<string, Dictionary<string, Interface>>
Interface
中没有 InterfaceName
。如您所见,您的网络和接口的名称与它们所命名的对象处于另一个级别,因此您不能简单地通过注释将它们加载到对象中。
您有两个选择:
- 将 YAML 加载到上述类型中,然后post-将其处理为您的类型结构。
- 为您的类型层次结构实施自定义构造函数和表示器,将其(反)序列化为您想要的 YAML 结构。
后一种选择要快一些,但我认为这不值得。