SignalR Core가 Newtonsoft의 TypeNameHandling 설정을 존중하지 않는 것 같습니다.

Matt M

공통 클래스에서 파생 된 클래스를 전달하고 있습니다. 역 직렬화 유효한 데이터를 전달 함에도 불구하고 허브는 TypeNameHandling을 존중하지 않으며 JSON의 $ type을 완전히 무시합니다. 내가 무엇을 시도하든 기본 클래스로 역 직렬화됩니다.

이벤트가 진행되어 허브로 보내는 JSON을 가져 와서 허브 코드에 문자열로 붙여 넣은 다음 JsonConvert.Deserialize를 사용하여 어떤 일이 발생하는지 확인하고 파생 개체로 올바르게 역 직렬화했습니다.

내 스타트 업에서는

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                TypeNameHandling = TypeNameHandling.Auto
            };

이것이 실제로 사용되고 있는지 확실하지 않았기 때문에 테스트 JSON 변환기를 만들고 CanRead 속성에 디버그를 추가했습니다 (정적 false를 반환했습니다). 맞았 어. 이것은 또한 내 문자열 역 직렬화가 작동하도록 허용했습니다.

그렇다면 허브를 제외한 모든 것이 작동하는 것처럼 보이는 허브는 무엇을 다르게 하고 있습니까?

한 페이

역 직렬화 유효한 데이터를 전달하더라도 허브는 TypeNameHandling을 존중하지 않으며 JSON의 $ type을 완전히 무시합니다. 내가 무엇을 시도하든 기본 클래스로 역 직렬화됩니다.

나는 나를 위해 작동하는 다음 코드 스 니펫으로 테스트를 수행했습니다. 참조 할 수 있습니다.

시작시 :

services.AddSignalR().AddJsonProtocol(options => {
    options.PayloadSerializerSettings = new Newtonsoft.Json.JsonSerializerSettings
    {
        TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto
    };
});

허브 방법 :

public async Task SendMessage1(Business mes)
{
    //code logic here
    //...
}

클래스:

public abstract class Business
{
    public string Name { get; set; }
}

public class Hotel : Business
{
    public int Stars { get; set; }
}

클라이언트에서 다음 JSON 데이터를 위의 허브 메서드로 보냅니다.

var ht = { "$type": "MyNamespaceHere.Hotel, NotesRTMSignalR", "Stars": 4, "Name": "Hudson Hotel" };

검사 결과:

여기에 이미지 설명 입력

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

가설은 pytest의 maxfail 인수를 존중하지 않는 것 같습니다.

분류에서Dev

CentOS7의 /etc/resolv.conf가 옵션을 존중하지 않는 것 같습니다.

분류에서Dev

CentOS에서 Open JDK 1.7을 사용했습니다. Oracle의 Java rpm을 설치했습니다. Oracle Java가 존재하지 않는 것 같습니다.

분류에서Dev

macOS Sierra의 PF가 ApplicationFirewall을 읽지 않는 것 같습니다.

분류에서Dev

glPopMatrix ()가 transformationmatrix를 재설정하지 않는 것 같습니다.

분류에서Dev

메서드 재정의가 작동하지 않는 것 같습니다.

분류에서Dev

"@ angular / core"에 의존하지 않는 것 같습니다. 이것은 오류입니다

분류에서Dev

ifconfig가 Centos Network Connections 기본 설정에 동의하지 않는 것 같습니다.

분류에서Dev

Ubuntu 14.04의 Tkinter가 작동하지 않는 것 같습니다.

분류에서Dev

setof / 3가 중복을 제거하지 않는 것 같습니다.

분류에서Dev

위치 : 헤더가 HTTP_REFERER를 설정하지 않는 것 같습니다.

분류에서Dev

HttpRequest.UrlReferrer가 존재하지 않는 것 같습니다.

분류에서Dev

내 퀵 정렬 절차가 아무것도하지 않는 것 같습니다.

분류에서Dev

chsh가 고정되지 않는 것 같습니다.

분류에서Dev

chsh가 고정되지 않는 것 같습니다.

분류에서Dev

Netbeans 오류가 수정되지 않는 것 같습니다.

분류에서Dev

HashSet의 두 객체가 같은 것을 실현하지 않습니다

분류에서Dev

Powershell을 Vim의 셸로 설정 : 명령이 올바르게 전달되지 않는 것 같습니다.

분류에서Dev

개체가 정의되지 않았지만 정의 된 것 같습니다.

분류에서Dev

Backbone.js View의 렌더링 방법에 선언 된 변수가 존재하지 않는 것 같습니다.

분류에서Dev

ASP.Net Core v3.1 MVC Ajax 형식의 사용자 지정 모델 유효성 검사가 작동하지 않는 것 같습니다.

분류에서Dev

iOS의 3DES 암호화가 마지막 블록을 암호화하지 않는 것 같습니다.

분류에서Dev

iOS의 3DES 암호화가 마지막 블록을 암호화하지 않는 것 같습니다.

분류에서Dev

서버의 accept () 함수가 클라이언트의 새 연결을 수락하지 않는 것 같습니다.

분류에서Dev

Bash의 정규 표현식 문제 : [^ negate]가 작동하지 않는 것 같습니다.

분류에서Dev

Redux-감속기를 전달하면 작업에 정의되지 않은 ID가있는 것 같습니다.

분류에서Dev

linqts의 메소드가 정의되지 않은 것 같습니다.

분류에서Dev

C의 파이프-파이프에서 읽을 때 scanf가 작동하지 않는 것 같습니다.

분류에서Dev

루트 사용자의 기본 셸을 POSIX가 아닌 셸로 설정하지 않는 것이 좋습니다.

Related 관련 기사

  1. 1

    가설은 pytest의 maxfail 인수를 존중하지 않는 것 같습니다.

  2. 2

    CentOS7의 /etc/resolv.conf가 옵션을 존중하지 않는 것 같습니다.

  3. 3

    CentOS에서 Open JDK 1.7을 사용했습니다. Oracle의 Java rpm을 설치했습니다. Oracle Java가 존재하지 않는 것 같습니다.

  4. 4

    macOS Sierra의 PF가 ApplicationFirewall을 읽지 않는 것 같습니다.

  5. 5

    glPopMatrix ()가 transformationmatrix를 재설정하지 않는 것 같습니다.

  6. 6

    메서드 재정의가 작동하지 않는 것 같습니다.

  7. 7

    "@ angular / core"에 의존하지 않는 것 같습니다. 이것은 오류입니다

  8. 8

    ifconfig가 Centos Network Connections 기본 설정에 동의하지 않는 것 같습니다.

  9. 9

    Ubuntu 14.04의 Tkinter가 작동하지 않는 것 같습니다.

  10. 10

    setof / 3가 중복을 제거하지 않는 것 같습니다.

  11. 11

    위치 : 헤더가 HTTP_REFERER를 설정하지 않는 것 같습니다.

  12. 12

    HttpRequest.UrlReferrer가 존재하지 않는 것 같습니다.

  13. 13

    내 퀵 정렬 절차가 아무것도하지 않는 것 같습니다.

  14. 14

    chsh가 고정되지 않는 것 같습니다.

  15. 15

    chsh가 고정되지 않는 것 같습니다.

  16. 16

    Netbeans 오류가 수정되지 않는 것 같습니다.

  17. 17

    HashSet의 두 객체가 같은 것을 실현하지 않습니다

  18. 18

    Powershell을 Vim의 셸로 설정 : 명령이 올바르게 전달되지 않는 것 같습니다.

  19. 19

    개체가 정의되지 않았지만 정의 된 것 같습니다.

  20. 20

    Backbone.js View의 렌더링 방법에 선언 된 변수가 존재하지 않는 것 같습니다.

  21. 21

    ASP.Net Core v3.1 MVC Ajax 형식의 사용자 지정 모델 유효성 검사가 작동하지 않는 것 같습니다.

  22. 22

    iOS의 3DES 암호화가 마지막 블록을 암호화하지 않는 것 같습니다.

  23. 23

    iOS의 3DES 암호화가 마지막 블록을 암호화하지 않는 것 같습니다.

  24. 24

    서버의 accept () 함수가 클라이언트의 새 연결을 수락하지 않는 것 같습니다.

  25. 25

    Bash의 정규 표현식 문제 : [^ negate]가 작동하지 않는 것 같습니다.

  26. 26

    Redux-감속기를 전달하면 작업에 정의되지 않은 ID가있는 것 같습니다.

  27. 27

    linqts의 메소드가 정의되지 않은 것 같습니다.

  28. 28

    C의 파이프-파이프에서 읽을 때 scanf가 작동하지 않는 것 같습니다.

  29. 29

    루트 사용자의 기본 셸을 POSIX가 아닌 셸로 설정하지 않는 것이 좋습니다.

뜨겁다태그

보관