0

我在 PowerShell 中有一个项目,我使用“Add-Type”创建了一个自定义类型。我想使用类,但我仅限于必须使用的系统上的 PowerShell 版本。

该对象被转换为 JSON 并使用 REST API 发送出去。为了避免一些命名问题,我最终在字段名称前加上了“”。我想在将它们发送到 API 之前将其删除。我认为进行重命名会很简单,但后来我意识到,如果我通过删除带有“”的任何内容来重命名 JSON 对象中的所有内容,我用于重命名的方法可能会导致问题

这是自定义类型:

Add-Type -typedef @"
public class SearchFilter
{
    public int      _filterOrder;
    public string   _property;
    public string   _direction;
    public string   _value;
    public string[] _values;
    public string   _operator;

    public SearchFilter()
    {
        _filterOrder = 0;
        _property = "";
        _direction = "";
        _value = "";
        _values = new string[0];
        _operator = "";
    }
}
"@

仅使用字符串 REPLACE 方法我会得到这个:

{
    "filterOrder":  0,
    "property":  "name",
    "direction":  "ASC",
    "value":  "value",
    "values":  [],
    "operator":  "Contains"
}

而不是这个:

{
    "filterOrder":  0,
    "property":  "name",
    "direction":  "ASC",
    "value":  "_value_",
    "values":  [],
    "operator":  "Contains"
}

这是我正在使用的方法:

# Create search filter object
$searchFilter = New-Object -TypeName "SearchFilter"

# Convert search filter to REST API JSON format
$apiPostBody = ConvertTo-Json -InputObject $searchFilter

# Remove all "_"
$apiPostBody = $apiPostBody .Replace("_","")

我检查了 PSObject 提供的方法,但我只是不确定语法。如果可能的话,我想在转换为 JSON 之前更改现有对象,而不必创建 CLONE 或遍历 JSON 值。

4

0 回答 0