除了一些基本的使用差异之外,似乎ExpandoObject
和DynamicJsonObject
表现相似,并且可以或多或少地交替使用,以解释所述差异。例如,我发现这个Gist以ExpandoObject开头,然后将其转换为DynamicJsonObject,以便将其转换为字符串:
dynamic expando = new ExpandoObject();
expando.Value = 10;
expando.Product = "Apples";
var dictionaryResult = System.Web.Helpers.Json.Encode(new DynamicJsonObject(expando));
但是,似乎我可以通过使用DynamicJsonObject
启动来完成相同的结果:
dynamic jsonobj = new DynamicJsonObject(new Dictionary<string, object>());
jsonObj.Value = 10;
jsonObj.Product = "Oranges";
var System.Web.Helpers.Json.Encode(jsonObj);
在这两种情况下,我最终得到一个包含所需值的字符串:
{"Value": "10", "Product": "Oranges"}
当然我意识到这种情况下的相似之处仅仅证明了两种不同工具的功能重叠,在某些情况下,这两种工具要比另一种更有用。
所以这是我的情景 - 我正在使用它作为一个方便的&amp;在通过REST API交付之前,灵活地构建一个复杂且有些随意的JSON字符串。分配给JSON对象的实际属性必须根据特定条件而有所不同,因此使用动态对象非常方便。
(鉴于此用例,DynamicJsonObject似乎是“合适的”选择,即使只是因为它的名字!)
有人可以帮助澄清这两者之间真正的,根本的区别,以及为什么我可以使用其中一种?