Как преобразовать строку JSON в PSObject? - PullRequest
0 голосов
/ 26 февраля 2020

Я хочу написать функцию PowerShell в C#. Во время процесса я получаю строку с содержимым JSON. Мой пример json содержимого:

string json = "{'TestNr':{'Name':'CSHARP', 'Description':'Test Descriptiopn'}}"

Эта строка должна быть преобразована в объект PSObject, как ConvertFrom-Json.

Я пытался создать объект с линиями ниже. Это работает, но это потребует большого количества ручных сценариев, особенно если строка JSON становится длиннее.

PSObject obj = new PSObject();
obj.Properties.Add(new PSNoteProperty("Head", "Children"));

Я пробовал также строку ниже:

obj = (PSObject)TypeDescriptor.GetConverter(typeof(PSObject)).ConvertFromString(json);

Для этого я получаю однако ошибка (я запускаю функцию в PowerShell 7):

TypeConverter не может преобразовать из System.String.

1 Ответ

0 голосов
/ 26 февраля 2020

Существует два способа анализа строки в C#, с которой проще всего go.

public class MyClass
{
    public TestNRClass TestNR { get; set; }
}

public class TestNRClass
{
    public string Name { get; set; }
    public string Description { get; set; }
}

// In the main,
string json = @"{""TestNr"":{""Name"":""CSHARP"", ""Description"":""Test Descriptiopn""}}";

MyClass jobj = JsonConvert.DeserializeObject<MyClass>(json);
Console.WriteLine(jobj.TestNR.Name);

Это со строго типизированным объектом класса. Это то, что вы должны использовать в C#.

Другой способ - получить объект

string json = @"{""TestNr"":{""Name"":""CSHARP"", ""Description"":""Test Descriptiopn""}}";

JObject obj = JObject.Parse(json);
Console.WriteLine(obj.ToString());
Console.WriteLine(obj["TestNr"]["Name"].ToString());

// You can also add more keyValuePair
obj["NewVariable"] = "stest";
Console.WriteLine(obj.ToString()); // Shows the new item as well.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...