我正在使用json.net存储一个序列化对象,我希望人们能够在文本编辑器中编辑它.我有一个基类,它包含对象的名称,然后是一个继承自该对象的类,并添加了一些其他属性.
问题是写出的属性首先写入派生类属性,然后写入基类afetr,所以我得到:
{
"MySpecialFiled": 4,
"Name": "This Is My Object",
"AnotherBaseField": 8,
}
Run Code Online (Sandbox Code Playgroud)
而不是:
{
"Name": "This Is My Object",
"AnotherBaseField": 8,
"MySpecialFiled": 4,
}
Run Code Online (Sandbox Code Playgroud)
当你在派生类中有一堆字段并希望在文本编辑器中实际查看/编辑时,你可以看到这有多痛苦!
我特别搞乱了源代码:
public static IEnumerable<FieldInfo> GetFields(Type targetType, BindingFlags bindingAttr)
Run Code Online (Sandbox Code Playgroud)
和
public static IEnumerable<PropertyInfo> GetProperties(Type targetType, BindingFlags bindingAttr)
Run Code Online (Sandbox Code Playgroud)
在ReflectionUtils.cs中,尝试颠倒顺序,以便基类属性成为第一,但我还没有取得任何成功.我错过了一些微不足道的事情吗?
我有一个需要在XP上运行的应用程序,但我希望能够调用:: SHCreateItemFromParsingName(),这只能从Vista开始.
这:http: //social.msdn.microsoft.com/Forums/vstudio/en-US/04eab1a9-5024-4199-b66c-8d20a83d4af4/shcreateitemfromparsingname-analog-on-xp?forum=vcgeneral
说过:
我相信你可以达到如下效果:SHParseDisplayName获取项目PIDL,然后SHGetDesktopFolder,最后是IShellFolder :: BindToObject
我尝试过的:
IFileDialog *pfd;
....
PIDLIST_ABSOLUTE pidl;
HRESULT hresult = ::SHParseDisplayName(m_path, 0, &pidl, SFGAO_FOLDER, 0);
if (SUCCEEDED(hresult))
{
IShellFolder *psf;
hresult = ::SHGetDesktopFolder(&psf);
if (SUCCEEDED(hresult))
{
IShellItem *child;
hresult = psf->BindToObject(pidl, 0, IID_IShellFolder, (void**)&child);
if (SUCCEEDED(hresult))
{
pfd->SetFolder(child);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想我主要是在与BindToObject斗争(因为我不是一个特别熟练的Windows程序员!)
这甚至是模糊的吗?