Это почти год, но для тех, кто сталкивается с той же проблемой ...
Это можно сделать, но вам нужно, чтобы ваша сигнатура метода 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 для вас. Все, что лучше всего подходит для вашей ситуации.