简体   繁体   中英

Parse an PSObject instance to a C# object

How can I parse an PSObject instance to a C# POCO model entity?

The PSObject instance is a dynamic object that contains these properties:

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

I have C# POCO model that fits those fields.

Is there a nice way to cast?

You either need to convert the PSObject instance to some common representation or iterate over PSObject.Properties and fill the fields of the POCO using reflection.

This simple serialize-deserialize code with Newtosoft.Json implements the first way and may work well for simple cases:

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}");
}

Output:

{"Name":"David","Diff":0.2,"File":"output.txt"}
Name: David
Diff: 0,2
File: output.txt

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM