初步问题:
这里我有一个用于从Entity Framework对象转换为JSON的函数:
public class JSON
{
public static string ConvertEntityToJSON(object dataToSerialize)
{
return JsonConvert.SerializeObject(dataToSerialize,
new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});
}
}
调试时," dataToSerialize"看起来如下:
SELECT
[xxx].[Firstattributefromdatabase] AS [First attribute from database],
[xxx].[Secondattributefromdatabase] AS [Second attribute from database]
FROM [xxx]
因此可见,SQL中的属性名称中的单词之间有空格,而不是下划线,但输出(表格中的一行)如下所示:
[{"First_attribute_from_database":"xxx","Second_attribute_from_database":"xxx"}]
可能导致此问题的任何线索以及如何解决这个问题?我将这个JSON数据加载到数据透视表中,这会导致所有字段都有下划线而不是单词之间的空格。
更新1:
好的,所以在查看使用Entity Framework从数据库生成的内容(来自数据库的EF设计器;数据库优先方法)之后,生成的类如下:
public partial class TestClass
{
public string First_attribute_from_database { get; set; }
public string Second_attribute_from_database { get; set; }
}
即使在MS SQL Server Management Studio中明确定义了这是一个VIEW(不是表本身),并且SQL的格式如下:
SELECT
[xxx].[Firstattributefromdatabase] AS [First attribute from database],
[xxx].[Secondattributefromdatabase] AS [Second attribute from database]
FROM [xxx]
所以问题出现了:如何克服下划线问题,因为C#属性的名称中不能有空格?
答案 0 :(得分:3)
问题已解决:
在此期间找到GetBoundsRect
。在那之后我刚刚从文章中实现了函数,在ResolvePropertyName中修改了替换,瞧,我的代码工作得非常好!希望这可以帮助所有使用Entity Framework的人,从数据库生成模型并尝试从C#对象转到JSON。
public class JSON
{
public static string ConvertEntityToJSON(object dataToSerialize)
{
return JsonConvert.SerializeObject(dataToSerialize,
new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
NullValueHandling = NullValueHandling.Ignore,
ContractResolver = new UnderscorePropertyNamesContractResolver()
});
}
}
public class UnderscorePropertyNamesContractResolver : DefaultContractResolver
{
public UnderscorePropertyNamesContractResolver() : base()
{
}
protected override string ResolvePropertyName(string propertyName)
{
return Regex.Replace(propertyName, "_", " ");
}
}