Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#winmd中使用JSON_C#_Windows 8_Windows Runtime_Winjs - Fatal编程技术网

在C#winmd中使用JSON

在C#winmd中使用JSON,c#,windows-8,windows-runtime,winjs,C#,Windows 8,Windows Runtime,Winjs,我正在创建一个用于Windows 8开发的winmd文件。我希望有一个很好的JavaScript(WinJS)体验,但除了原始JSON,我不知道如何使用我的方法,例如,我希望开发人员在WinJS中编写如下代码: bar.foo({ bar: 19 }) 在我的C#library里,我会有这样的东西 public sealed class Bar { public void Foo(JsonObject jsonObject) { 这可以编译,但是当我试图从WinJS调用foo

我正在创建一个用于Windows 8开发的winmd文件。我希望有一个很好的JavaScript(WinJS)体验,但除了原始JSON,我不知道如何使用我的方法,例如,我希望开发人员在WinJS中编写如下代码:

bar.foo({ bar: 19 })
在我的C#library里,我会有这样的东西

public sealed class Bar
{
    public void Foo(JsonObject jsonObject)
    {
这可以编译,但是当我试图从WinJS调用foo时,我得到一个错误,说方法的签名无效。我假设这是因为它公开了一个“托管”类型的Windows.Data.Json.JsonObject


任何关于如何使用JSON的想法都可以从WinJS世界传递到.NET(在WinMD中)。

我也在Windows 8上启动,早上大部分时间都在努力解析JSON。使我能够将JSON字符串反序列化为Windows.Data.JSON.JsonObject

以下是我总结的代码:

        HttpResponseMessage response = await Client.SendAsync(RequestMessage);
        response.EnsureSuccessStatusCode();
        string json = response.Content.ReadAsString();
        ResponseObject = new JsonObject(json);

如果要反序列化为自己的数据类型,可以尝试System.Runtime.Serialization.Json.DataContractJsonSerializer。我在这方面运气不太好;我一直从ReadObject()方法返回null,没有找到获取任何诊断信息的方法。

我也在启动Windows 8,早上大部分时间都在努力解析JSON。使我能够将JSON字符串反序列化为Windows.Data.JSON.JsonObject

以下是我总结的代码:

        HttpResponseMessage response = await Client.SendAsync(RequestMessage);
        response.EnsureSuccessStatusCode();
        string json = response.Content.ReadAsString();
        ResponseObject = new JsonObject(json);

如果要反序列化为自己的数据类型,可以尝试System.Runtime.Serialization.Json.DataContractJsonSerializer。我在这方面运气不太好;我一直从ReadObject()方法返回null,没有找到获取任何诊断信息的方法。

我认为这是不可能的,至少在开发人员预览中是不可能的

我创建了一个C#方法,该方法有一个
object
参数,假设任何可以通过WinRT从JS表单转换为.Net表单的对象都可以通过

它适用于数组:JS数组将作为
object[]
传入。但如果我试图传递一个JSON对象,就会抛出一个“类型不匹配”错误。这就是为什么我认为这是不可能的


我还尝试了使用创建对象,但也没有成功。

我认为这是不可能的,至少在开发人员预览中是这样

我创建了一个C#方法,该方法有一个
object
参数,假设任何可以通过WinRT从JS表单转换为.Net表单的对象都可以通过

它适用于数组:JS数组将作为
object[]
传入。但如果我试图传递一个JSON对象,就会抛出一个“类型不匹配”错误。这就是为什么我认为这是不可能的


我还尝试了使用创建对象,但也不起作用。

这已经快一年了,但对于遇到相同问题的其他人来说

这是可以做到的,但是您需要让winmd方法签名接受字符串作为参数,然后使用静态JsonObject.Parse解析JSON文本

public sealed class Bar
{
    public void Foo(string json)
    {
        if (!String.IsNullOrEmpty(json))
        {
            var jobj = JsonObject.Parse(json);
            var barVal = jobj.GetNamedNumber("bar");
            // if all went well, barVal should be a double value of 
            // the number passed in the object (19.0 based on the original question).
        }                 
    }
}
但是,调用此方法时,需要将对象定义用引号括起来,使其成为字符串。您还需要将字段名括在引号或JsonObject中。Parse将抛出一个异常,指出该字符串不是有效的JSON字符串

bar.foo("{ \"bar\": 19 }");
对于一个有很多字段的对象,这可能会很耗时,并且会导致难看的代码。最好是调用对象上的JSON.stringify将其转换为字符串

bar.foo(JSON.stringify({ bar: 19 }));

当然,您也可以制作一些包装器方法来为您调用JSON.stringify。无论什么最适合你的情况。

这几乎是一年前的事了,但对于遇到同样问题的其他人来说

这是可以做到的,但是您需要让winmd方法签名接受字符串作为参数,然后使用静态JsonObject.Parse解析JSON文本

public sealed class Bar
{
    public void Foo(string json)
    {
        if (!String.IsNullOrEmpty(json))
        {
            var jobj = JsonObject.Parse(json);
            var barVal = jobj.GetNamedNumber("bar");
            // if all went well, barVal should be a double value of 
            // the number passed in the object (19.0 based on the original question).
        }                 
    }
}
但是,调用此方法时,需要将对象定义用引号括起来,使其成为字符串。您还需要将字段名括在引号或JsonObject中。Parse将抛出一个异常,指出该字符串不是有效的JSON字符串

bar.foo("{ \"bar\": 19 }");
对于一个有很多字段的对象,这可能会很耗时,并且会导致难看的代码。最好是调用对象上的JSON.stringify将其转换为字符串

bar.foo(JSON.stringify({ bar: 19 }));

当然,您也可以制作一些包装器方法来为您调用JSON.stringify。任何最适合您的情况的代码。

JSON代码实际上是基于字符串的。因此,它可以简单地说:bar.foo(新的JsonObject(“{bar:19}”);JSON代码实际上是基于字符串的。因此,它可以简单地说:bar.foo(新的JsonObject(“{bar:19}”);对不起…误读了你的问题。这适用于C#end of things,但不适用于WinJS。不过,对你问题的最初评论似乎是一种可能的前进方向;您是否尝试过从WinJS中的字符串创建JsonObject并将其传递到foo()方法中?抱歉……误读了您的问题。这适用于C#end of things,但不适用于WinJS。不过,对你问题的最初评论似乎是一种可能的前进方向;您是否尝试过从WinJS中的字符串创建JsonObject并将其传递到foo()方法中?