Files
RhythmicWallpaper/AudioVisualizer/ActivityWatch/FocusStatusResponseParser.cs

67 lines
2.0 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Text.Json;
using System.Text.Json.Serialization;
namespace AudioWallpaper.ActivityWatch {
// 定义数据模型
public class ApiResponse {
[JsonPropertyName("code")]
public int Code { get; set; }
[JsonPropertyName("data")]
public DataItem[] Data { get; set; }
}
public class DataItem {
[JsonPropertyName("message")]
public MessageContent Message { get; set; }
}
public class MessageContent {
[JsonPropertyName("content")]
public string Content { get; set; }
}
public class FocusStatusRecord {
[JsonPropertyName("time_slice")]
public string TimeSlice { get; set; }
[JsonPropertyName("focus_state")]
public string FocusState { get; set; }
[JsonPropertyName("productivity_score")]
public double ProductivityScore { get; set; }
[JsonPropertyName("message")]
public string Message { get; set; }
}
public class FocusStatusParser {
public FocusStatusRecord GetLatestRecord(string jsonResponse) {
// 解析外层响应
var apiResponse = JsonSerializer.Deserialize<ApiResponse>(jsonResponse);
if (apiResponse?.Data == null || apiResponse.Data.Length == 0)
throw new InvalidOperationException("无效的API响应数据");
// 提取内容字符串包含Markdown代码块
string content = apiResponse.Data[0].Message.Content;
// 去除Markdown代码块标记
string cleanJson = content
.Replace("```json", "")
.Replace("```", "")
.Trim();
// 解析内部JSON数组
var records = JsonSerializer.Deserialize<FocusStatusRecord[]>(cleanJson);
if (records == null || records.Length == 0)
throw new InvalidOperationException("未找到专注状态记录");
// 返回最新的记录(数组的第一个元素)
return records[0];
}
}
}