将 PSObject 实例解析为 C# 对象
Parse an PSObject instance to a C# object
如何将 PSObject 实例解析为 C# POCO 模型实体?
PSObject 实例是一个包含以下属性的动态对象:
@{Name=David; Diff=0.0268161397964839; File=Output.txt}
我有适合这些领域的 C# POCO 模型。
有什么好的投射方式吗?
您需要将 PSObject
实例转换为某种通用表示,或者迭代 PSObject.Properties
并使用反射填充 POCO 的字段。
这个带有 Newtosoft.Json 的简单序列化-反序列化代码实现了第一种方式,可能适用于简单的情况:
public class MyInfo
{
public string Name { get; set; }
public double Diff { get; set; }
public string File { get; set; }
}
static void Main(string[] args)
{
PSObject obj = PSObject.AsPSObject(new { Name = "David", Diff = 0.2, File = "output.txt" });
var serialized = JsonConvert.SerializeObject(obj.Properties.ToDictionary(k => k.Name, v => v.Value));
Console.WriteLine(serialized);
var deseialized = JsonConvert.DeserializeObject<MyInfo>(serialized);
Console.WriteLine($"Name: {deseialized.Name}");
Console.WriteLine($"Diff: {deseialized.Diff}");
Console.WriteLine($"File: {deseialized.File}");
}
输出:
{"Name":"David","Diff":0.2,"File":"output.txt"}
Name: David
Diff: 0,2
File: output.txt
如何将 PSObject 实例解析为 C# POCO 模型实体?
PSObject 实例是一个包含以下属性的动态对象:
@{Name=David; Diff=0.0268161397964839; File=Output.txt}
我有适合这些领域的 C# POCO 模型。
有什么好的投射方式吗?
您需要将 PSObject
实例转换为某种通用表示,或者迭代 PSObject.Properties
并使用反射填充 POCO 的字段。
这个带有 Newtosoft.Json 的简单序列化-反序列化代码实现了第一种方式,可能适用于简单的情况:
public class MyInfo
{
public string Name { get; set; }
public double Diff { get; set; }
public string File { get; set; }
}
static void Main(string[] args)
{
PSObject obj = PSObject.AsPSObject(new { Name = "David", Diff = 0.2, File = "output.txt" });
var serialized = JsonConvert.SerializeObject(obj.Properties.ToDictionary(k => k.Name, v => v.Value));
Console.WriteLine(serialized);
var deseialized = JsonConvert.DeserializeObject<MyInfo>(serialized);
Console.WriteLine($"Name: {deseialized.Name}");
Console.WriteLine($"Diff: {deseialized.Diff}");
Console.WriteLine($"File: {deseialized.File}");
}
输出:
{"Name":"David","Diff":0.2,"File":"output.txt"}
Name: David
Diff: 0,2
File: output.txt