netcore 底層序列化Dictionary 對象的一個Bug 以及解決方案


  • 症狀 
    • 入參

       

       

    • 未進行優化(3.1默認序列化規則)序列化之后的參數

       

       

  • 解決方案
    • 新增序列化規則
            public class ObjectToInferredTypesConverter
             : JsonConverter<object>
              {
                  public override object Read(
                      ref Utf8JsonReader reader,
                      Type typeToConvert,
                      JsonSerializerOptions options)
                  {
                      if (reader.TokenType == JsonTokenType.True)
                      {
                          return true;
                      }
      
                      if (reader.TokenType == JsonTokenType.False)
                      {
                          return false;
                      }
      
                      if (reader.TokenType == JsonTokenType.Number)
                      {
                          if (reader.TryGetInt64(out long l))
                          {
                              return l;
                          }
      
                          return reader.GetDouble();
                      }
      
                      if (reader.TokenType == JsonTokenType.String)
                      {
                          if (reader.TryGetDateTime(out DateTime datetime))
                          {
                              return datetime;
                          }
      
                          return reader.GetString();
                      }
      
                      // Use JsonElement as fallback.
                      // Newtonsoft uses JArray or JObject.
                      using JsonDocument document = JsonDocument.ParseValue(ref reader);
                      return document.RootElement.Clone();
                  }
      
                  public override void Write(
                      Utf8JsonWriter writer,
                      object objectToWrite,
                      JsonSerializerOptions options) =>
                          throw new InvalidOperationException("Should not get here.");
              }

       

    • service 添加規則
           services.AddControllers().AddJsonOptions(config =>
                  {
                      
                      config.JsonSerializerOptions.Converters.Add(new ObjectToInferredTypesConverter());
                      //設置時間格式
                      //config.JsonSerializerOptions.DateFormatString = "yyyy-MM-dd HH:mm:ss";
                  });

       

  • 添加之后的症狀

     

    解決方案來源 https://docs.microsoft.com/zh-cn/dotnet/standard/serialization/system-text-json-converters-how-to?view=netcore-3.0&pivots=dotnet-core-3-1#deserialize-inferred-types-to-object-properties(貌似5.0已經解決此問題)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 c++對象的序列化與反序列化的解決方案----flatbuffers的使用 redis反序列化失敗解決方案 shiro反序列化漏洞解決方案 Java對象的序列化(Object Serialization) (轉)jquery serialize表單序列化,當radio或checkbox 未選中時,沒有序列化到對象中的原因分析和解決方案 - ghostsf 【Expression 序列化】WCF的簡單使用及其Expression Lambada的序列化問題初步解決方案(一) 【Expression 序列化】WCF的簡單使用及其Expression Lambada的序列化問題初步解決方案(二) 【Expression 序列化】WCF的簡單使用及其Expression Lambada的序列化問題初步解決方案(三) java JSON 序列化類(List 轉String) 【Expression 序列化】WCF的簡單使用及其Expression Lambada的序列化問題初步解決方案(四)——關於Guid的問題
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM