C#AdaptiveCards 1.2.4简单卡反序列化问题

C#AdaptiveCards 1.2.4简单卡反序列化问题,c#,deserialization,microsoft-teams,adaptive-cards,C#,Deserialization,Microsoft Teams,Adaptive Cards,我正在使用NuGet的AdaptiveCards 1.2.4,反序列化存在一些问题。我能够深入了解并准确地确定错误的来源,并将卡片缩短为2列集。卡片与它们分开解析,但不能同时与两者解析 Exception.Message = "Current error context error is different to requested error." Exception.StackTrace = " at Newtonsoft.Json.Serialization.JsonSerialize

我正在使用NuGet的AdaptiveCards 1.2.4,反序列化存在一些问题。我能够深入了解并准确地确定错误的来源,并将卡片缩短为2列集。卡片与它们分开解析,但不能同时与两者解析

Exception.Message = "Current error context error is different to requested error."
Exception.StackTrace = "   at 
Newtonsoft.Json.Serialization.JsonSerializerInternalBase.GetErrorContext(Object currentObject, Object 
member, String path, Exception error)
at Newtonsoft.Json.Serialization.JsonSerializerInternalBase.IsErrorHandled(Object currentObject, J 
JsonContract contract, Object keyValue, IJsonLineInfo lineInfo, String path, Exception ex)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type 
objectType, Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings 
settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
at AdaptiveCards.AdaptiveCard.FromJson(String json)
at AdaptiveCardsDeserializationProblem.Program.Main(String[] args) in 
C:\Work\Demo\AdaptiveCardsDeserializationProblem\AdaptiveCardsDeserializationProblem\Startup.cs:line 
34"
这是显示问题的示例代码

        try
        {
            var problematicCard = "{\"type\":\"AdaptiveCard\",\"body\":[{\"type\":\"ColumnSet\",\"spacing\":\"None\",\"columns\":[{\"type\":\"Column\",\"style\":\"default\",\"items\":[{\"type\":\"FactSet\"}],\"width\":\"stretch\"}]},{\"type\":\"ColumnSet\",\"spacing\":\"None\",\"columns\":[{\"type\":\"Column\",\"style\":\"default\",\"items\":[{\"type\":\"FactSet\"}],\"width\":\"stretch\"}]}],\"version\":\"1.0\"}";
            var firstColumnSet = "{\"type\":\"AdaptiveCard\",\"body\":[{\"type\":\"ColumnSet\",\"spacing\":\"None\",\"columns\":[{\"type\":\"Column\",\"style\":\"default\",\"items\":[{\"type\":\"FactSet\"}],\"width\":\"stretch\"}]}],\"version\":\"1.0\"}";
            var secondColumnSet = "{\"type\":\"AdaptiveCard\",\"body\":[{\"type\":\"ColumnSet\",\"spacing\":\"None\",\"columns\":[{\"type\":\"Column\",\"style\":\"default\",\"items\":[{\"type\":\"FactSet\"}],\"width\":\"stretch\"}]}],\"version\":\"1.0\"}";

            var adaptiveCard = AdaptiveCard.FromJson(problematicCard);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            throw;
        }
这是卡的JSON->

这就是自适应卡设计器中的卡的外观


看起来像是在这里扔的

诊断序列化/反序列化问题的最佳方法是自己填充对象并序列化它,以查看它将生成什么json内容。我们希望相同的json能够反序列化回来,不会出现错误

在本例中,我们填充确切的对象,并使用
ToJson()
方法对其进行序列化

我们看到唯一的区别是

问题:

... \"items\":[{\"type\":\"FactSet\"}],\"width\":\"stretch\"}]} ...
工作:

... \"items\":[{\"type\":\"FactSet\", \"facts\": []}],\"width\":\"stretch\"}]} ...
是的,当更改为包含facts空数组时,反序列化工作正常


希望这能有所帮助。

谢谢,我还没有看到那些空洞的事实。虽然这张卡片看起来对设计师来说是有效的,而且有点奇怪:)事实上,只有一个列集,事实:[]似乎不是必需的。它成功地反序列化了。问题似乎更多地与AdaptiveCards如何使用Json.Net进行反序列化有关(可能是自定义转换器在反序列化第一个列集时出错,然后在反序列化第二个列集时出错,我认为此错误是由这一事实引起的).在遍历AdaptiveCards repo并检查其序列化程序后,我得出了相同的结论。打D不好