トップ «前の日記(2016-12-18) 最新 次の日記(2016-12-23)» 編集

日々の破片

著作一覧

2016-12-20

_ DynamicJsonとVB

JSONを受け付けるシステムをVBで記述している。

受け付けるJSONはいろいろなので、いちいちJsonSerializerでかっちりクラスを定義するつもりはない。

かといって、今更Dictionary<string, object>もないだろうということでdynamicだ。

というわけで、評判も良いしコンパクトだしDynamicJsonを使うことにした。

が、だめだ。VB Runtimeの問題だとは思うが、TryInvokeMemberは呼び出すが、TryGetを呼び出さない(C#からは呼べるのでTryInvokeMemberのバグということはないよな?)

'実証コード
Imports System
Imports Codeplex.Data
Module Module1
    Sub Main()
        Dim o As Object
        o = DynamicJson.Parse("{""strprop"":""abc"", ""numprop"": 123}")
        Console.WriteLine("strprop:" & o.strprop) '=> True
        Console.WriteLine("numprop:" & o.numprop) '=> True
    End Sub
End Module

オープンソースはすばらしい。

というわけで、おれさまJsonParserに改造した。

ExpandoObjectに全部読み込んでしまうから、VBでも問題なし。

    Sub Main()
        Dim o As Object
        o = DynamicJson.Parse("{""strprop"":""abc"", ""numprop"": 123}")
        Console.WriteLine("strprop:" & o.strprop) '=> True
        Console.WriteLine("numprop:" & o.numprop) '=> True
        o = JsonParser.Parse("{""strprop"":""abc"", ""numprop"": 123}")
        Console.WriteLine("strprop:" & o.strprop) '=> abc
        Console.WriteLine("numprop:" & o.numprop) '=> 123
    End Sub

追記:いや、DynamicJsonのTryInvokeMemberの実装バグだ……。C#と違ってVBは()を省略できるから、プロパティゲッタではなくメソッド呼び出しと解釈して、かつ結果がTrueになるからoutパラメータに設定したTrueを結果としているわけじゃん。今更Issuesに送るのもなんだな(6年前のプロジェクトだし)というか、本当にVBは誰も使ってないんだなぁ。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え