代码之家  ›  专栏  ›  技术社区  ›  Kry Zoh

如何将JSON转换为TimeSpan c#

  •  -1
  • Kry Zoh  · 技术社区  · 1 周前

    我在C#中将json转换为timeSpan时遇到问题,我有不同的json。以下是几个例子:

    {
      ‘seconds’: 60
    }
    {
      ‘hours’: 11
    }
    {
      ‘years: 5
    }
    

    如果你有什么想法,我将不胜感激 谢谢

    我希望根据返回的Json动态创建时间跨度。 例如 作为输入:

    {
      ‘seconds’: 60
    }
    

    =>输出

    new TimeSpan( 0, 0, 0, 60, 0 )
    
    1 回复  |  直到 1 周前
        1
  •  0
  •   Magnus    1 周前

    创建您自己的类并将其反序列化为。然后将其转换为 TimeSpan .

    internal class Program
    {
        static void Main(string[] args)
        {
            var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
            var json =
                """
                { "seconds": 60, "days": 5 }
                """;
    
            var timeSpan = JsonSerializer.Deserialize<MyTimeSpan>(json, options)?.ToTimeSpan();
        }
    
        public class MyTimeSpan
        {
            public int Seconds { get; set; }
            public int Minutes { get; set; }
            public int Hours { get; set; }
            public int Days { get; set; }
    
            public TimeSpan ToTimeSpan() => new(Days, Hours, Minutes, Seconds);
        }
    }
    
        2
  •  0
  •   Tiger Resource    1 周前
    using System;
    using System.Text.Json;
    public class JsonTimeSpanConverter
    {
    public TimeSpan ConvertJsonToTimeSpan(string json)
    {
        var jsonDocument = JsonDocument.Parse(json);
        var root = jsonDocument.RootElement;
    
        int days = root.TryGetProperty("days", out var daysElement) ? daysElement.GetInt32() : 0;
        int hours = root.TryGetProperty("hours", out var hoursElement) ? hoursElement.GetInt32() : 0;
        int minutes = root.TryGetProperty("minutes", out var minutesElement) ? minutesElement.GetInt32() : 0;
        int seconds = root.TryGetProperty("seconds", out var secondsElement) ? secondsElement.GetInt32() : 0;
        int milliseconds = root.TryGetProperty("milliseconds", out var millisecondsElement) ? millisecondsElement.GetInt32() : 0;
    
        return new TimeSpan(days, hours, minutes, seconds, milliseconds);
    }
    }
    

    JsonTimeSpanConverter类包含一个方法ConvertJsonToTimeSpan,该方法以JSON字符串作为输入,并提取相关的时间组件(天、小时、分钟、秒和毫秒)来创建TimeSpan对象。代码使用系统。文本用于解析Json数据的Json命名空间。