JSON 使用枚举对象的字符串
JSON string to object using Enums
我有 JSON 个字符串,类似于:
{"1":{"1":"driver","2":"New York, NY"},"2":{"3":"male","2":"Alabama"}}
我有两个枚举:
public enum StoragePrimaryKeys
{
Login = 1,
Account = 2
};
public enum StorageSecondaryKeys
{
JobTitle = 1,
JobId = 2,
JobLocation = 3,
RenewDate = 4,
ExpirationDate = 5
};
如何将此 JSON 反序列化为对象?
我想做下一件事:
var jss = new JavaScriptSerializer();
Dictionary<string, string> sData = jss.Deserialize<Dictionary<string, string>>(value);
string output = string.empty;
foreach (KeyValuePair<string, string> entry in sData)
{
if (Convert.ToInt32(entry.Key) == StorageSecondaryKeys.JobTitle) {
}
output += "\n key:" + entry.Key + ", value:" + entry.Value;
}
但也许有更有效的方法?
我认为这是一个新问题,因为我在键中有数字应该转换为枚举的字符串
谢谢。
您的数据模型应该如下所示:
Dictionary<StoragePrimaryKeys, Dictionary<StorageSecondaryKeys, string>>
但是,通过实验,我发现 JavaScriptSerializer
不支持枚举作为字典键,所以你不能直接反序列化到这样的对象。因此,您可以反序列化为 string-keyed 字典并使用 Linq 进行转换:
var dict = new JavaScriptSerializer().Deserialize<Dictionary<string, Dictionary<string, string>>>(value)
.ToDictionary(
p => (StoragePrimaryKeys)Enum.Parse(typeof(StoragePrimaryKeys), p.Key),
p => p.Value.ToDictionary(p2 => (StorageSecondaryKeys)Enum.Parse(typeof(StorageSecondaryKeys), p2.Key), p2 => p2.Value));
这将生成您想要的词典。
或者,您可以安装 json.net 并直接反序列化到所需的字典,因为 Json.NET 确实支持 enum-keyed 个字典:
var dict = JsonConvert.DeserializeObject<Dictionary<StoragePrimaryKeys, Dictionary<StorageSecondaryKeys, string>>>(value);
我有 JSON 个字符串,类似于:
{"1":{"1":"driver","2":"New York, NY"},"2":{"3":"male","2":"Alabama"}}
我有两个枚举:
public enum StoragePrimaryKeys
{
Login = 1,
Account = 2
};
public enum StorageSecondaryKeys
{
JobTitle = 1,
JobId = 2,
JobLocation = 3,
RenewDate = 4,
ExpirationDate = 5
};
如何将此 JSON 反序列化为对象?
我想做下一件事:
var jss = new JavaScriptSerializer();
Dictionary<string, string> sData = jss.Deserialize<Dictionary<string, string>>(value);
string output = string.empty;
foreach (KeyValuePair<string, string> entry in sData)
{
if (Convert.ToInt32(entry.Key) == StorageSecondaryKeys.JobTitle) {
}
output += "\n key:" + entry.Key + ", value:" + entry.Value;
}
但也许有更有效的方法?
我认为这是一个新问题,因为我在键中有数字应该转换为枚举的字符串
谢谢。
您的数据模型应该如下所示:
Dictionary<StoragePrimaryKeys, Dictionary<StorageSecondaryKeys, string>>
但是,通过实验,我发现 JavaScriptSerializer
不支持枚举作为字典键,所以你不能直接反序列化到这样的对象。因此,您可以反序列化为 string-keyed 字典并使用 Linq 进行转换:
var dict = new JavaScriptSerializer().Deserialize<Dictionary<string, Dictionary<string, string>>>(value)
.ToDictionary(
p => (StoragePrimaryKeys)Enum.Parse(typeof(StoragePrimaryKeys), p.Key),
p => p.Value.ToDictionary(p2 => (StorageSecondaryKeys)Enum.Parse(typeof(StorageSecondaryKeys), p2.Key), p2 => p2.Value));
这将生成您想要的词典。
或者,您可以安装 json.net 并直接反序列化到所需的字典,因为 Json.NET 确实支持 enum-keyed 个字典:
var dict = JsonConvert.DeserializeObject<Dictionary<StoragePrimaryKeys, Dictionary<StorageSecondaryKeys, string>>>(value);