小编ste*_*eet的帖子

json.net:首先是序列化基类成员

我正在使用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中,尝试颠倒顺序,以便基类属性成为第一,但我还没有取得任何成功.我错过了一些微不足道的事情吗?

c# json json.net

9
推荐指数
1
解决办法
1601
查看次数

在Windows XP上替换:: SHCreateItemFromParsingName()

我有一个需要在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程序员!)

这甚至是模糊的吗?

c++ windows winapi

5
推荐指数
1
解决办法
2346
查看次数

标签 统计

c# ×1

c++ ×1

json ×1

json.net ×1

winapi ×1

windows ×1