C# 如何比较两个DynamicJSONObject以检查它们是否相等?

C# 如何比较两个DynamicJSONObject以检查它们是否相等?,c#,json,C#,Json,我看不出你怎么能比较两个物体。有一种方法GetDynamicMemberNames,它告诉您每个属性都有哪些属性,但如何访问这些属性的值 我已经找到了函数的存根,但不知道如何检查对象是否相同。它源于测试两个json字符串。一个是来自web API的响应,另一个是预期结果。我使用Json.Decode(expectedJsonString)和Json.Decode(resultJsonString)构建了这些对象 功能存根: public static bool AreJsonObjectsEqu

我看不出你怎么能比较两个物体。有一种方法
GetDynamicMemberNames
,它告诉您每个属性都有哪些属性,但如何访问这些属性的值

我已经找到了函数的存根,但不知道如何检查对象是否相同。它源于测试两个json字符串。一个是来自web API的响应,另一个是预期结果。我使用
Json.Decode(expectedJsonString)
Json.Decode(resultJsonString)
构建了这些对象

功能存根:

public static bool AreJsonObjectsEqual(DynamicJsonObject obj1, DynamicJsonObject obj2)
{
        return // ?
}

如何比较这两个对象以确保它们相等?

您可以尝试类似的方法

public static bool AreJsonObjectsEqual(DynamicJsonObject obj1, DynamicJsonObject obj2)
{
    var memberNamesNotEqual = obj1.GetDynamicMemberNames().Except(obj2.GetDynamicMemberNames()).Any();
    if (!memberNamesNotEqual)
    {
       dynamic dObj1 = (dynamic)obj1;
       dynamic dObj2 = (dynamic)obj2;
       foreach (var memberName in obj1.GetDynamicMemberNames()){
           if(dObj1[memberName] != dObj2[memberName]) return false
       }
       return true
    }
    return memberNamesNotEqual;
}

您可以尝试将它们动态转换为IDictionary,然后进行比较。@user629926我想我尝试了类似的操作,但无法转换为IDictionary。我想你可以用ExpandoObjects来实现它,但我在DynamicJsonObject上运气不太好。实际上这取决于你的DynamicJsonObject实现。如果它是ASP.NET helpers提供的,我想你可以像((IDictionary@user629926谢谢,这是System.Web.Helpers中的一个。我尝试使用
((IDictionary)(dynamic)obj1)强制转换
但它抛出了错误
无法将“System.Web.Helpers.DynamicJsonObject”类型的对象强制转换为“System.Collections.Generic.IDictionary 2[System.String,System.object]“.
是的!这非常感谢,我的尝试失败了,因为我没有先强制转换为动态。我也喜欢你的解决方案的简单性。@请注意,如果成员是
列表
数组
它可能会返回错误的答案啊,是的,还没有遇到这个问题,但我会尝试解决。干杯。