using System.ComponentModel.DataAnnotations;
using System.Text.Json.Serialization;
using System.Xml.Serialization;
using Microsoft.AspNetCore.Mvc.ModelBinding;
namespace Dpz.Core.Public.ViewModel.DynamicPages;
/// <summary>
/// 修改自定义页 入参
/// </summary>
public class VmEditDynamicPage
{
/// <summary>
/// HTML 内容
/// </summary>
[Required]
public HtmlContent? HtmlContent { get; set; }
/// <summary>
/// 样式 内容
/// </summary>
[XmlIgnore]
public SortedDictionary<int, StyleContent> StyleContents { get; set; } = [];
/// <summary>
/// Gets or sets SerializableStyleContents.
/// </summary>
[XmlArray(ElementName = "StyleContents")]
[XmlArrayItem(ElementName = "StyleContent")]
[JsonIgnore]
public KeyValueElement[] SerializableStyleContents =>
StyleContents.Select(x => new KeyValueElement(x.Key, x.Value)).ToArray();
/// <summary>
/// 脚本 内容
/// </summary>
[XmlIgnore]
public SortedDictionary<int, ScriptContent> ScriptContents { get; set; } = [];
/// <summary>
/// Gets or sets SerializableScriptContents.
/// </summary>
[XmlArray(ElementName = "ScriptContents")]
[XmlArrayItem(ElementName = "ScriptContent")]
[JsonIgnore]
public KeyValueElement[] SerializableScriptContents =>
ScriptContents.Select(x => new KeyValueElement(x.Key, x.Value)).ToArray();
/// <summary>
/// 创建人ID
/// </summary>
[BindNever, JsonIgnore]
public string? CreatorId { get; set; }
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
这是一个用于处理动态页面编辑功能的视图模型(ViewModel)类。让我详细解释一下这个代码:
类的用途
VmEditDynamicPage 是一个用于修改自定义页面的数据传输对象,主要用于接收前端传来的页面编辑数据。
主要属性分析
1. HTML内容
[Required]
public HtmlContent? HtmlContent { get; set; }
- 存储页面的HTML内容
- 使用
[Required]特性进行必填验证
2. 样式内容处理
[XmlIgnore]
public SortedDictionary<int, StyleContent> StyleContents { get; set; } = [];
[XmlArray(ElementName = "StyleContents")]
[XmlArrayItem(ElementName = "StyleContent")]
[JsonIgnore]
public KeyValueElement[] SerializableStyleContents =>
StyleContents.Select(x => new KeyValueElement(x.Key, x.Value)).ToArray();
这里使用了一个巧妙的设计模式:
StyleContents:实际的业务属性,使用SortedDictionary存储样式内容,按序号排序SerializableStyleContents:用于XML序列化的辅助属性[XmlIgnore]和[JsonIgnore]确保在不同序列化场景下使用正确的属性
3. 脚本内容处理
[XmlIgnore]
public SortedDictionary<int, ScriptContent> ScriptContents { get; set; } = [];
[XmlArray(ElementName = "ScriptContents")]
[XmlArrayItem(ElementName = "ScriptContent")]
[JsonIgnore]
public KeyValueElement[] SerializableScriptContents =>
ScriptContents.Select(x => new KeyValueElement(x.Key, x.Value)).ToArray();
- 与样式内容采用相同的设计模式
- 用于处理页面的JavaScript脚本内容
4. 创建人ID
[BindNever, JsonIgnore]
public string? CreatorId { get; set; }
[BindNever]:防止模型绑定时从请求中绑定此属性[JsonIgnore]:JSON序列化时忽略此属性- 通常在服务器端设置,不允许客户端修改
设计特点
- 多重序列化支持:同时支持JSON和XML序列化
- 数据验证:使用DataAnnotations进行输入验证
- 安全性:通过
[BindNever]保护敏感字段 - 有序存储:使用
SortedDictionary确保内容按顺序处理 - 序列化转换:通过辅助属性处理复杂类型的序列化问题
这个类很好地展现了在ASP.NET Core中处理复杂数据模型的最佳实践。
AI 正在分析代码…
评论加载中...