Sharepoint 2013 SelectedRefinementControlsJson抛出错误

Sharepoint 2013 SelectedRefinementControlsJson抛出错误,json,sharepoint-2013,powershell-3.0,Json,Sharepoint 2013,Powershell 3.0,我正在尝试通过以下powershell脚本更新sharepoint 2013精简程序Web部件: $spweb = Get-SPWeb "http://da-server/search/" $page = $spweb.GetFile("Pages/results.aspx") $page.CheckOut() # Find the Refinement web part $webPartManager = $spweb.GetLimitedWebPartManager("http://da-

我正在尝试通过以下powershell脚本更新sharepoint 2013精简程序Web部件:

$spweb = Get-SPWeb "http://da-server/search/"
$page = $spweb.GetFile("Pages/results.aspx")
$page.CheckOut()
# Find the Refinement web part
$webPartManager = $spweb.GetLimitedWebPartManager("http://da-  server/search/Pages/results.aspx", [System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared)
$rwp = $webpartmanager.webparts | ? { $_.title -eq 'Refinement' }
# Refiners are updated by changing the JSON
 $j = $rwp.SelectedRefinementControlsJson | ConvertFrom-Json
 $j.refinerConfigurations | % { if ($_.propertyName -eq 'LastModifiedTime') {     $_.displayName = 'Mod Time'; }
**$rwp.SelectedRefinementControlsJson = ConvertTo-Json $j -Compress** This line throwing the error.
 # Save our changes
 $webpartmanager.SaveChanges($rwp)          # save changes to webpart
 $page.CheckIn('Changed last mod refiner')
 $page.Publish('Changed last mod refiner')
上面突出显示的第10行抛出以下错误:

Exception setting "SelectedRefinementControlsJson": No parameterless constructor defined for type of 'Micrososft.Office.Server.Search.WebControls.RefinementControl[]'"

我猜您在一个或多个精炼厂中只定义了一个别名。在本例中,PS ConvertTo Json函数将数组转换为字符串。更多详情请参见此处

当我与同样的问题斗争时,这里是我的解决方案

Function ConvertTo-Json {

param($inputObject)

    if ($inputObject -eq $null) { "null" }
    else {
        switch ($inputObject.GetType().Name) {
            "String" { '"' + $inputObject +'"' }
            "Boolean" { 
                if($inputObject){
                    "true"
                }
                else {
                    "false"
                }
            }
            "Object[]" {
                $items = @()
                $inputObject | % {
                    $items += ConvertTo-Json $_
                }
                $ofs = ","; "[" + [string]$items + "]"
            }
            "PSCustomObject" {
                $properties = @()
                $inputObject | Get-Member -MemberType *Property | % {
                    $properties += '"'+ $($_.Name) + '":' + $(ConvertTo-Json $inputObject.($_.Name))
                }
                $ofs = ","; "{" + [string]$properties + "}"
            }
            default { $inputObject }
        }
    }
}
现在它可以像以前一样使用,但是没有-Compress参数

$rwp.SelectedRefinementControlsJson = ConvertTo-Json $j

我猜您在一个或多个精炼厂中只定义了一个别名。在本例中,PS ConvertTo Json函数将数组转换为字符串。更多详情请参见此处

当我与同样的问题斗争时,这里是我的解决方案

Function ConvertTo-Json {

param($inputObject)

    if ($inputObject -eq $null) { "null" }
    else {
        switch ($inputObject.GetType().Name) {
            "String" { '"' + $inputObject +'"' }
            "Boolean" { 
                if($inputObject){
                    "true"
                }
                else {
                    "false"
                }
            }
            "Object[]" {
                $items = @()
                $inputObject | % {
                    $items += ConvertTo-Json $_
                }
                $ofs = ","; "[" + [string]$items + "]"
            }
            "PSCustomObject" {
                $properties = @()
                $inputObject | Get-Member -MemberType *Property | % {
                    $properties += '"'+ $($_.Name) + '":' + $(ConvertTo-Json $inputObject.($_.Name))
                }
                $ofs = ","; "{" + [string]$properties + "}"
            }
            default { $inputObject }
        }
    }
}
现在它可以像以前一样使用,但是没有-Compress参数

$rwp.SelectedRefinementControlsJson = ConvertTo-Json $j

我猜您在一个或多个精炼厂中只定义了一个别名。在本例中,PS ConvertTo Json函数将数组转换为字符串。更多详情请参见此处

当我与同样的问题斗争时,这里是我的解决方案

Function ConvertTo-Json {

param($inputObject)

    if ($inputObject -eq $null) { "null" }
    else {
        switch ($inputObject.GetType().Name) {
            "String" { '"' + $inputObject +'"' }
            "Boolean" { 
                if($inputObject){
                    "true"
                }
                else {
                    "false"
                }
            }
            "Object[]" {
                $items = @()
                $inputObject | % {
                    $items += ConvertTo-Json $_
                }
                $ofs = ","; "[" + [string]$items + "]"
            }
            "PSCustomObject" {
                $properties = @()
                $inputObject | Get-Member -MemberType *Property | % {
                    $properties += '"'+ $($_.Name) + '":' + $(ConvertTo-Json $inputObject.($_.Name))
                }
                $ofs = ","; "{" + [string]$properties + "}"
            }
            default { $inputObject }
        }
    }
}
现在它可以像以前一样使用,但是没有-Compress参数

$rwp.SelectedRefinementControlsJson = ConvertTo-Json $j

我猜您在一个或多个精炼厂中只定义了一个别名。在本例中,PS ConvertTo Json函数将数组转换为字符串。更多详情请参见此处

当我与同样的问题斗争时,这里是我的解决方案

Function ConvertTo-Json {

param($inputObject)

    if ($inputObject -eq $null) { "null" }
    else {
        switch ($inputObject.GetType().Name) {
            "String" { '"' + $inputObject +'"' }
            "Boolean" { 
                if($inputObject){
                    "true"
                }
                else {
                    "false"
                }
            }
            "Object[]" {
                $items = @()
                $inputObject | % {
                    $items += ConvertTo-Json $_
                }
                $ofs = ","; "[" + [string]$items + "]"
            }
            "PSCustomObject" {
                $properties = @()
                $inputObject | Get-Member -MemberType *Property | % {
                    $properties += '"'+ $($_.Name) + '":' + $(ConvertTo-Json $inputObject.($_.Name))
                }
                $ofs = ","; "{" + [string]$properties + "}"
            }
            default { $inputObject }
        }
    }
}
现在它可以像以前一样使用,但是没有-Compress参数

$rwp.SelectedRefinementControlsJson = ConvertTo-Json $j

尝试
converttojson$j-Depth 3


开箱即用,
修改者
属性具有多个别名,并且是嵌套级别。默认情况下,
转换为Json
只能达到2级。因此,您必须使用
-depth
来正确转换它

尝试
转换为Json$j-Depth 3


开箱即用,
修改者
属性具有多个别名,并且是嵌套级别。默认情况下,
转换为Json
只能达到2级。因此,您必须使用
-depth
来正确转换它

尝试
转换为Json$j-Depth 3


开箱即用,
修改者
属性具有多个别名,并且是嵌套级别。默认情况下,
转换为Json
只能达到2级。因此,您必须使用
-depth
来正确转换它

尝试
转换为Json$j-Depth 3

开箱即用,
修改者
属性具有多个别名,并且是嵌套级别。默认情况下,
转换为Json
只能达到2级。因此,您必须使用
-depth
来正确转换它