0

我正在尝试使用来自 PowerShell 的 Leonardo B 的litjson库。我需要使用的库的入口点是一个静态方法。我可以使用 add-type 加载程序集,没问题。尝试使用静态方法虽然会出现此错误:

PS C:\Users\david>[litjson.jsonmapper]::toobject("{`"foo`":`"bar`"}")
format-default : The JsonData instance has to be initialized first
    + CategoryInfo          : NotSpecified: (:) [format-default], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.FormatDefaultCommand

必须首先初始化 JsonData 实例

我认为发生的事情是该类的静态构造函数没有运行,但 Lars Truijens 纠正了这种误解。该错误是 JsonData 类的异常。尽管同一行代码在 VS2012(针对 .net 3.5)中正常工作,但它不会在 powershell 中运行。

更新:

此单元测试在 Visual Studio 2012 中通过:

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using LitJson;

namespace litjsonTest
{
    [TestClass]
    public class TestJsonMapper
    {
        [TestMethod]
        public void TestMethod1()
        {
            var obj = LitJson.JsonMapper.ToObject("{\"foo\":\"bar\"}");
            Assert.IsNotNull(obj);
        }
    }
}
4

1 回答 1

1

那将完全破坏.Net。我不信。甚至更多,因为错误来自 JsonData 类,并且是因为没有从该类的(非静态)构造函数设置类型字段。请参阅http://couchbrowse.googlecode.com/svn/trunk/LitJson/JsonData.cs您确定您的 LitJson 代码正确吗?这个确切的代码在 C# 程序中有效吗?

更新

你确定你的 Json 是正确的吗?您发布的示例不是。应该有双引号。尝试转义使用反勾号或使用此处字符串

[litjson.jsonmapper]::toobject("{`"foo`":`"bar`"}")
于 2013-05-28T19:31:22.750 回答