小编Kri*_*ekk的帖子

JSON.net - 字段是字符串或List <string>

我有一种情况,JSON从服务器REST返回的返回一个Movie-objects列表,所有这些都是通过大量信息进行的.该REST服务结果中的几个字段根据可用信息而变化.

一个例子:电影总是有一些屏幕截图(图像),演员和导演.根据所讨论的电影,可能有一个或多个图像,一个或多个演员和一个或多个导演.几个案例的示例JSON:

{
    "title": "Movie title",
    "images": [
        "http://www.url.com/img_0.jpg",
        "http://www.url.com/img_1.jpg",
        "http://www.url.com/img_2.jpg",
        "http://www.url.com/img_3.jpg",
        "http://www.url.com/img_4.jpg"
    ],
    "actors": [
        "Steven Berkoff",
        "Nikolaj Coster-Waldau",
        "Julie Cox"
    ],
    "directors": "Simon Aeby"
},
{
    "title": "Another movie",
    "images": "http://www.url.com/img_1.jpg",
    "actors": "actor 1"
    "directors": [
        "Justin Bieber",
        "Justin Timberlake"
    ]
}
Run Code Online (Sandbox Code Playgroud)

问题是,使用JSON.net,我如何创建一个处理这个问题的转换器?我一直在搜索互联网,但仍未找到解决方案.

关于同一个问题的另一个问题:如果字段是字符串列表或简单字符串,如何使JSON.NET以任何方式创建List(如果只是一个简单的字符串,则创建一个包含一个成员的列表)

编辑:这个REST服务不受我的控制

c# json.net windows-phone-7

18
推荐指数
1
解决办法
1万
查看次数

将填充的List <BaseClass>转换为List <ChildClass>

我有一个List<BaseClass>成员.我想名单(及其所有成员特别是)转换为一个类型List<ChildClass>,其中ChildClass继承BaseClass.我知道我可以通过foreach获得相同的结果:

List<ChildClass> ChildClassList = new List<ChildClass>();
foreach( var item in BaseClassList )
{
    ChildClassList.Add( item as ChildClass );
}
Run Code Online (Sandbox Code Playgroud)

但是有更简洁的方法吗?注意 - 这是在WP7平台上完成的.

c# inheritance windows-phone-7

14
推荐指数
2
解决办法
4492
查看次数

如何使用React Hooks将某些内容集中在下一个渲染上

我正在玩钩子,我正在尝试做以下事情:

import React, { useState, useRef } from 'react';

const EditableField = () => {
  const [isEditing, setEditing] = useState(false);
  const inputRef = useRef();
  const toggleEditing = () => {
    setEditing(!isEditing);
    if (isEditing) {
      inputRef.current.focus();
    }
  };
  return (
    <>
      {isExpanded && <input ref={inputRef} />}
      <button onClick={toggleEditing}>Edit</button>
    </>
  );
};
Run Code Online (Sandbox Code Playgroud)

这将失败,因为它current是null,因为组件尚未重新渲染,并且输入字段尚未渲染(因此尚未聚焦).

这样做的正确方法是什么?我可以使用usePreviousReact Hooks FAQ中提出的钩子,但这似乎是一个痛苦的解决方法.

有不同的方式吗?

reactjs react-hooks

14
推荐指数
2
解决办法
8412
查看次数

测试是否在Jasmine中触发了一个事件

你如何测试是否在Jasmine中没有触发事件jquery-jasmine

我工作的一个项目,我们不使用jQuery(wohoo),我试着写我的菜单触发功能单元测试.它的工作原理如下:

  • 您单击一个按钮
  • 然后我的可测试组件运行 document.dispatchEvent(new CustomEvent('menu.toggle'))
  • 我想测试该组件确实调度了自定义事件.

我该如何测试?

javascript testing unit-testing javascript-events jasmine

10
推荐指数
1
解决办法
6103
查看次数

如何在导航时保持iOS Safari的独立模式

在iOS'独立网络应用程序模式中,并且您单击链接时,该链接在Mobile Safari中打开,而不是保持独立模式.这对我来说毫无意义(至少对于内部链接而言).

我能想到修复此问题的唯一方法是向document节点添加一个单击处理程序,并手动导航如下:

if (window.navigator.standalone) {
  document.addEventListener('click', (e) => {
    if (e.target.tagName === 'A') {
      e.preventDefault();
      window.location = e.target.getAttribute('href');
  });
}
Run Code Online (Sandbox Code Playgroud)

获得这种行为是否有一种不太常见的方式?这真的伤害了我的眼睛.

javascript safari ios

8
推荐指数
1
解决办法
1274
查看次数

是否可以隐藏(不删除)PivotItem?

我有一种情况,我正在展示一组PivotItems和(取决于具体情况)一个最喜欢的.

当包含我的收藏夹的列表为空时,我需要能够隐藏此枢轴 - 但是当它存在某些东西时它需要显示.

现在,我可以删除它,但是这个场景呢:

  1. 转到数据透视图(没有收藏夹 - 因为列表为空)
  2. 转到其中一个PivotItem并选择一个项目.
  3. 在自己的视图中选择该项作为收藏夹
  4. 点击后退按钮,返回到枢轴视图.

现在将没有收藏夹 - 枢轴,这还不够好.

我试图用Visibility ="hidden"删除它,但VS抱怨没有正确指定数据上下文(它是.)

有任何想法吗?

c# wpf windows-phone-7

6
推荐指数
1
解决办法
3511
查看次数

重构Liquibase changelog文件

我正在使用Liquibase来完成我正在进行的这个项目,并且所有的更改日志都在一个大的XML文件中.不幸的是,这个文件已经变得太大了 - 我们想要引入一个"主"文件,其中包括原始文件和任何新文件.

旧结构:

/db/changesets-from-beginning-of-time.xml
Run Code Online (Sandbox Code Playgroud)

新结构:

/db/changesets/changesets-from-beginning-of-time.xml
/db/changesets/changesets-v.1.2.3.xml
/db/changesets/changeset-master.xml
Run Code Online (Sandbox Code Playgroud)

changesets-*-files 的内容只是changeset xml,而changeset-master.xml文件如下所示:

<databaseChangeLog xmlns="...skipped...">
    <include file="changesets-from-beginning-of-time.xml" 
              relativeToChangelogFile="true"/>
    <include file="changesets-v1.2.3.xml" 
              relativeToChangelogFile="true"/>
</databaseChangeLog>
Run Code Online (Sandbox Code Playgroud)

现在,DATABASECHANGELOG我的数据库中的表引用了旧文件,因此再次运行旧的更改集.

根据Liquibase文档,每个变更集都由组合唯一标识[filepath/-name]:::[id]:::[author]- 这对我来说不是最佳的.

所以我的问题是 - 如何在不破坏liquibase设置和清空数据库的情况下重构文件结构?

xml database liquibase

6
推荐指数
3
解决办法
5443
查看次数

多重前提

我正在实施一个变更集,Liquibase它需要一些不同的先决条件才能在尝试运行之前有效。

场景 #1:如果表 A、B、C 存在,则标记为已运行

场景 #2:如果表 X、Y、Z 不存在,则停止执行变更集

换句话说,我需要两个<preConditions>带有不同onFail子句的标签。Liquibase 完全允许这样做吗?我似乎无法让它发挥作用。这些文档的信息量不是很大。

liquibase

6
推荐指数
1
解决办法
1万
查看次数

如何在树下进一步更新redux状态

对于给定的reducer,我的redux状态树通常看起来像这样:

{
  someField: 'some value',
  // ... more fields
  metadata: {
    pending: false,
    fetched: true,
  }
}
Run Code Online (Sandbox Code Playgroud)

通常,当我执行异步请求时,我会触发一个SOME_ACTION_REQUEST动作,该动作将metadata.pending属性设置为true.当匹配SOME_ACTION_RESPONSESOME_ACTION_ERROR事件稍后涓涓细流时,它会再次重置为false .

但是,我更新状态的方式有点冗长:

case actions.SOME_ACTION_REQUEST: {
  return {
    ...state,
    metadata: { ...state.metadata, pending: true },
  };
}
Run Code Online (Sandbox Code Playgroud)

有更简单的方法吗?

Object.assign({}, state, { metadata: { pending: true } }) 也不是很易读.

javascript ecmascript-6 redux

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

如何将列表与C#中的现有列表进行排序?

我有一个List<int> allIDs包含原始订单ID的列表.我正在创建一个元素选择器,它允许用户在此列表中添加和删除ID到另一个List<int> selectedIDs.现在,我已经全力以赴并且正常工作,但每当用户删除并稍后添加相同的元素时,它就会添加到列表的末尾(selectedIDs.Add( id )).

我想将元素插入到其原始位置,使用它allIDs作为以前的位置的引用.

以下是将所有内容放在上下文中的一些列表摘录:

List<int> allIDs = new List<int> {10, 11, 9, 155, 12, 299, 15...};
List<int> selectedIDs = new List<int> { 10, 9, 155, 299, 15... }
Run Code Online (Sandbox Code Playgroud)

现在让我们说我从selectedIDs-list中删除了id = 299 ,以便稍后再尝试添加它.如何插入它之间15515?我知道我可以使用该list.Insert(obj, index)方法在列表中的任何位置插入,但是如何以最简单的方式以编程方式执行此操作?

c# linq sorting list

4
推荐指数
1
解决办法
356
查看次数