【问题】
这段C#代码:
//"L" : "http://g-ecx.images-amazon.com/images/G/01/kindle/dp/2012/KC/KC-slate-01-lg._V401028090_.jpg", //"S" : "http://g-ecx.images-amazon.com/images/G/01/kindle/dp/2012/KC/KC-slate-01-sm._V401028090_.jpg" //"L" : "http://g-ecx.images-amazon.com/images/G/01/kindle/dp/2012/KC/KC-slate-03-lg._V400694812_.jpg", //"S" : "http://g-ecx.images-amazon.com/images/G/01/kindle/dp/2012/KC/KC-slate-03-sm._V400694812_.jpg", //"rich": { // src: "http://g-ecx.images-amazon.com/images/G/01/misc/untranslatable-image-id.jpg", // width: null, // height: null //} Type curType = imgUrlObj.GetType(); Dictionary<string, string> imgUrlDict = (Dictionary<string, string>)imgUrlObj; string largeImgUrlStr = ""; if (imgUrlDict.TryGetValue("L", out largeImgUrlStr)) { imageUrlList[idx] = largeImgUrlStr; gotImageUrlOk = true; }
涉及到,将Object的imgUrlObj,转换为所希望的:Dictionary<string, string>
其中包含的值为:
对应的其Type类型为:
curType = {Name = "Dictionary`2" FullName = "System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Object, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e0… |
结果转换就出错了:
An unhandled exception of type ‘System.InvalidCastException’ occurred in ScrapeAmazonProduct.exe Additional information: Unable to cast object of type ‘System.Collections.Generic.Dictionary`2[System.String,System.Object]’ to type ‘System.Collections.Generic.Dictionary`2[System.String,System.String]’. |
【解决过程】
1.之前一直没看懂。
现在大概看懂了。
说是不能把:
System.Collections.Generic.Dictionary`2[System.String,System.Object]
转换为:
System.Collections.Generic.Dictionary`2[System.String,System.String]
所以,我们需要把对应的string换成Object:
Type curType = imgUrlObj.GetType(); Dictionary<string, Object> imgUrlDict = (Dictionary<string, Object>)imgUrlObj; Object largeImgUrObj = ""; if (imgUrlDict.TryGetValue("L", out largeImgUrObj)) { imageUrlList[idx] = largeImgUrObj.ToString(); gotImageUrlOk = true; }
试试结果,就OK了:
【总结】
在将Object转换为原先以为的
Dictionary<string, string>
其实只是针对于这样的内容:
"L" : "http://g-ecx.images-amazon.com/images/G/01/kindle/dp/2012/KC/KC-slate-01-lg._V401028090_.jpg", "S" : "http://g-ecx.images-amazon.com/images/G/01/kindle/dp/2012/KC/KC-slate-01-sm._V401028090_.jpg" |
是可以的。
但是后面还会有别的情况的:
此时,就必须用
Dictionary<string, Object>
了。否则就会报错:
Unable to cast object of type ‘System.Collections.Generic.Dictionary`2[System.String,System.Object]’ to type ‘System.Collections.Generic.Dictionary`2[System.String,System.String]’. |
了。
心得是:
要十分注意你所转换的对象的真正的类型,和当前的值。
不要搞错类型了。
转载请注明:在路上 » 【已解决】C#中,Dictionary转换出错:Additional information: Unable to cast object of type ‘System.Collections.Generic.Dictionary`2[System.String,System.Object]’ to type ‘System.Collections.Generic.Dictionary`2[System.String,System.String]’