C# 将枚举映射到json属性

C# 将枚举映射到json属性,c#,json.net,C#,Json.net,我有一个名为InstrumentConfigValues的类,其属性具有实现接口的类型。现在我有了一个名为InstrumentConfig的枚举,它有一组值。这些值类似于json文件中的键。我想映射类似于[JsonPropertyInstrumentConfig.lowDiskSpace.ToString]的内容 出于某种原因,它不允许这样做,并抱怨说: 属性参数必须是常量表达式 我特别提到了许多帖子。但是如何使用enum键映射每个属性呢。我也看到了这篇文章,但无法与我的问题相关联。请帮忙/ p

我有一个名为InstrumentConfigValues的类,其属性具有实现接口的类型。现在我有了一个名为InstrumentConfig的枚举,它有一组值。这些值类似于json文件中的键。我想映射类似于[JsonPropertyInstrumentConfig.lowDiskSpace.ToString]的内容

出于某种原因,它不允许这样做,并抱怨说:

属性参数必须是常量表达式

我特别提到了许多帖子。但是如何使用enum键映射每个属性呢。我也看到了这篇文章,但无法与我的问题相关联。请帮忙/

public class InstrumentConfigValues : IInstrumentConfig
{      
    public double SpaceNeededForSingleRun
    {
        get; set;
    }

    public int NumberOfInputSlots
    {
        get; set;
    }

    public int SupportedChannelCount
    {
        get; set;
    }
}

//I want this inheritance as some other class wants to access the values.
public abstract class InstrumentConfigReadWrite : InstrumentConfigValues
{
    protected ReturnCodes PopulateValuesFromJObject(JObject jObject, string path)
    {
        try
        {
            if (JsonConvert.DeserializeObject<InstrumentConfigValues>(jObject.ToString()) == null)
            {
                return ReturnCodes.ErrorReadingFile;
            }
        }
        catch (JsonSerializationException jex)
        {
            SystemDebugLogLogger.LogException(jex, "Invalid Instrument Config File Values. Data needs to be copied over.");
            return ReturnCodes.ErrorReadingFile;
        }
        return ReturnCodes.Success;
    }
}

只要使用当前编译器,就可以使用

[JsonPropertynameofInstrumentConfig.lowDiskSpace]
如果您尝试使用此选项,并得到一个类似编译错误的错误:名称“nameof”在当前上下文中不存在,这意味着您没有使用当前编译器。关键字nameof是在C 6.0/Visual Studio 2015中引入的,任何比它更新的都可以。

只要您使用的是当前的编译器,就可以使用

[JsonPropertynameofInstrumentConfig.lowDiskSpace]
如果您尝试使用此选项,并得到一个类似编译错误的错误:名称“nameof”在当前上下文中不存在,这意味着您没有使用当前编译器。关键字名称是在C 6.0/Visual Studio 2015中引入的,任何更新的都可以。

您希望[JsonPropertyInstrumentConfig.LowDiskSpace.ToString]做什么?如果这确实起作用,则属性名称将变为LowDiskSpace disk pace?可能重复的可能重复的只是为了澄清,您希望将InstrumentConfigValue的实例序列化为一个简单字符串,对吗?如果是,请参阅。如果没有,请您用一个显示您的模型和您想要生成的JSON的示例来澄清您的问题。在我的情况下,我希望确保JSON文件中的键映射到枚举中的名称。例如:在我的枚举中,如果我有lowdiskspace,在json中我有lowdiskspace:25,那么这两个键都匹配。否则,如果它类似于lowdisksp:25,那么我想说它是一个无效的json文件,因为键不匹配。您希望[JsonPropertyInstrumentConfig.LowDiskSpace.ToString]做什么?如果这确实起作用,则属性名称将变为LowDiskSpace disk pace?可能重复的可能重复的只是为了澄清,您希望将InstrumentConfigValue的实例序列化为一个简单字符串,对吗?如果是,请参阅。如果没有,请您用一个显示您的模型和您想要生成的JSON的示例来澄清您的问题。在我的情况下,我希望确保JSON文件中的键映射到枚举中的名称。例如:在我的枚举中,如果我有lowdiskspace,在json中我有lowdiskspace:25,那么这两个键都匹配。否则,如果它类似于lowdisksp:25,那么我想说它是一个无效的json文件,因为键不匹配。