【问题标题】:Parse an PSObject instance to a C# object将 PSObject 实例解析为 C# 对象
【发布时间】:2016-06-27 08:59:12
【问题描述】:

如何将 PSObject 实例解析为 C# POCO 模型实体?

PSObject 实例是一个包含以下属性的动态对象:

@{Name=David;  Diff=0.0268161397964839; File=Output.txt}

我有适合这些领域的 C# POCO 模型。

有什么好的投射方式吗?

【问题讨论】:

    标签: c# powershell psobject


    【解决方案1】:

    您要么需要将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
    

    【讨论】:

    • NewtonSoft 的广告循环参考。我会再试一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    相关资源
    最近更新 更多