मैं पावरहेल 2.0 के साथ एक वेब सेवा में उपयोग के लिए एक हैशटेबल को एक जेसन ऑब्जेक्ट में बदलने की कोशिश कर रहा हूं।मैं शक्तियों में एक json स्ट्रिंग में एक hastable कैसे परिवर्तित कर सकते हैं?
$testhash = @{
Name = 'John Doe'
Age = 10
Amount = 10.1
MixedItems = (1,2,3,"a")
NestedHash = @{
nestedkey = "nextedvalue"
}
}
function toJson($obj){
$ms = New-Object IO.MemoryStream
$type = $obj.getType()
[Type[]]$types = ($obj | select -expand PsTypeNames | Select -unique) + [type]'System.Management.Automation.PSObject'
$js = New-Object System.Runtime.Serialization.Json.DataContractJsonSerializer $type, $types, ([int]::MaxValue), $false, $null, $false
$js.writeObject($ms, $obj) | out-null
$utf8.GetString($ms.ToArray(), 0, $ms.Length)
$ms.Dispose() | out-null
}
toJson $testhash
'[{"Key":"Name","Value":"John Doe"},{"Key":"Age","Value":10},{"Key":"Amount","Value":10.1},{"Key":"NestedHash","Value":[{"__type":"KeyValuePairOfanyTypeanyType:#System.Collections.Generic","key":"nestedkey","value":"nextedvalue"}]},{"Key":"MixedItems","Value":[1,2,3,"a"]}]'
मैं एक तरीका है कि प्रकार की जानकारी को दबाने चाहिए में DataContractJsonSerializer constructor उपयोग कर रहा हूँ, लेकिन यह स्पष्ट रूप से नहीं। मैं इसके द्वारा निकालने वाली कुंजी और मूल्य जोड़ों से भी खुश हूं लेकिन मैं इसे ऐसा नहीं करना चाहता हूं। मैं क्या गलत कर रहा हूं?
यह कुछ serialize समारोह अपने आप पर क्या करना चाहिए की तरह लगता है, नहीं? किसी भी तरह से - यह लगभग पूरी तरह से काम करता है - नेस्टेड हैश के दो स्तरों पर विफल रहता है। – reconbot
@ जादूगर - मुझे लगता है कि यह सरल हैशटेबल्स के लिए होना चाहिए। आप देख सकते हैं, पहले से ही स्क्रिप्ट्स हैं जैसे मैंने JSON पार्सिंग करने के लिए लिंक किया है। – manojlds
मैंने http://poshcode.org/2930 का उपयोग करके समाप्त किया जिसमें मुद्दों के साथ पर्याप्त काम करता है - एक दिन पावरहेल 3.0 उपलब्ध होगा और मैं इन बर्बाद घंटों पर वापस देखूंगा और परेशान रहूंगा – reconbot