?,c#,json,.net,serialization"/>

首页 > 解决方案 > 如何序列化字典?

问题描述

我目前正在构建一个应用程序,其中我有一些共享 Dictionary<Object, Guid> 的任务。

为了避免冲突,实际的字典包含在 DictionaryHandler 类中,具有三种方法:

class DictionaryHandler
{
    
    private object lockProcesses = new object();
    private Dictionary<Process, Guid> processes = new Dictionary<Process, Guid>();

    public Dictionary<Process, Guid> GetProcesses()
    {
        lock (lockProcesses)
        {
            // TODO
        }   
    }

    public void AddToProcesses(Process process, Guid guid)
    {
        lock (lockProcesses)
        {
            processes.Add(process, guid);
        }
    }

    public void RemoveFromProcesses(Process process)
    {
        lock (lockProcesses)
        {
            processes.Remove(process);
        }
    }
}

对于上下文,这是 Process 类:

public class Process
{
    public string Name { get; }
    public bool Enabled { get; }
    public TimeSpan RuntimeWindowStart { get; }
    public TimeSpan RuntimeWindowEnd { get; }
    public TimeSpan Cooldown { get; }
    public int Priority { get; }
    public string Username { get; }
    public string ExceptionDate { get; }
    public string ExceptionDay { get; }
    public string AllowedWorkdays { get; }
    public string SpecificResource { get; }
    public string Assigned { get; set; }
    public DateTime? Timestamp { get; set; }

    public Process(string name, bool enabled, TimeSpan runtimeWindowStart, TimeSpan runtimeWindowEnd, TimeSpan cooldown, int priority, string username, string exceptionDate, string exceptionDay, string allowedWorkdays, string specificResource, string assigned, DateTime? timestamp)
    {
        Name = name;
        Enabled = enabled;
        RuntimeWindowStart = runtimeWindowStart;
        RuntimeWindowEnd = runtimeWindowEnd;
        Cooldown = cooldown;
        Priority = priority;
        Username = username;
        ExceptionDate = exceptionDate;
        ExceptionDay = exceptionDay;
        AllowedWorkdays = allowedWorkdays;
        SpecificResource = specificResource;
        Assigned = assigned;
        Timestamp = timestamp;
    }
}

我的主要问题是我想找到一种通过 GetProcesses() 方法返回字典副本的方法,而不返回对“实际”字典的引用。

据我所知,执行此操作的最佳方法是对字典进行序列化和反序列化并返回它。但是我很难做到这一点,因为我找不到与我的情况相匹配的例子。

我已经阅读了这个这个并试图将两者结合起来 - 不幸的是没有运气。

标签: c#json.netserialization

解决方案


使用String而不是Guid.


Guid 是结构类型。因此,序列化和反序列化方法可能无法正常工作。


推荐阅读