JSON.Net 시리얼라이저가 JsonProperty를 무시합니까?
다음 엔티티 클래스가 있습니다.
public class FacebookComment : BaseEntity
{
[BsonId(IdGenerator = typeof(ObjectIdGenerator))]
[BsonRepresentation(MongoDB.Bson.BsonType.ObjectId)]
[JsonProperty("_id")]
public ObjectId Id { get; set; }
public int? OriginalId { get; set; }
public DateTime Date { get; set; }
public string Message { get; set; }
public string Sentiment { get; set; }
public string Author { get; set; }
}
이 오브젝트가 JSON에 시리얼화되면 Id 필드를 "_id":{...}"로 쓰고 싶습니다.AFIK는 원하는 속성명을 JsonProperty 속성에 전달하기만 하면 됩니다.그렇게 하면 됩니다.하지만 JsonConvert에 전화를 걸면.Serialize Object. 내 속성을 무시하고 대신 렌더링합니다.
{
Author: "Author name",
Date: "/Date(1321419600000-0500)/",
DateCreated: "/Date(1323294923176-0500)/",
Id: {
CreationTime: "/Date(0)/",
Increment: 0,
Machine: 0,
Pid: 0,
Timestamp: 0
},
Message: "i like stuff",
OriginalId: null,
Sentiment: "Positive"
}
보시다시피 ID 필드가 잘못된 필드 이름으로 렌더링되고 있습니다.
좋은 생각 있어요?이 문제에 대해 1시간 동안 작업했는데, 시리얼라이저가 Json Property를 무시하는 것처럼 보이는 이유를 알 수 없습니다.
건설적인 입력은 대단히 감사합니다.
간단한 답변: 모든 어셈블리가 동일한 JSON을 참조하고 있는지 확인하십시오.NET DLL아마 지금 일어나고 있는 일은,[JsonProperty]
하나의 어셈블리에 있는 하나의 DLL에서 다른 어셈블리를 찾고 있는 오브젝트를 시리얼화한다.[JsonProperty]
CLR 오브젝트타입이 다르기 때문에 사실상 무시되고 있습니다.
긴 답변:나는 단지 이 문제가 있었지만 다행히 나는 함께 일하는 수업이 하나 있었기 때문에JsonProperty
하지만 탐정 일은 할 수 없었어요
비노동계급을 최소값까지 제거하고 노동계급과 비교해보니 비노동계급이 다른 어셈블리에 있다는 것 외에는 어떤 차이도 볼 수 없었습니다.
내가 수업을 다른 어셈블리로 옮겼을 때, 그것은 정상적으로 작동했다.
네임스페이스의 JSON 시리얼라이제이션에 대해 알아보려고 잠시 둘러보았지만, 해당되지 않는 것 같아서 레퍼런스를 살펴보니 확실히 엔티티 DLL의 오래된 JSONNET 3.5 DLL과 메인 프로젝트 파일의 NUGET 4.5 버전을 참조하고 있었습니다.
이것은 두 가지 예를 제시합니다.[JsonProperty]
attribute(일반 클래스일 뿐)는 이름이 같다고 해서 serializer가 attribute를 인식하는 것도 아닙니다.
같은 문제가 있었습니다.Net Core 3.1)를 사용하고 있는 이유는JsonPropertyName
주석, 에 있습니다.System.Text.Json.dll
단, 을 사용하여JsonConvert.Serialize(string)
이것은 분명히 에 있습니다.Newtonsoft.Json.dll
. 시리얼라이제이션 기능은 자신의 라이브러리 주석만 존중하는 것 같습니다.변화하는JsonPropertyName
ann 。JsonProperty
Newtonsoft.Json.dll
시리얼라이저 사용:
new JavaScriptSerializer().Serialize(message)
하지만, 이것을 엄격하게 사용하세요.
JsonConvert.SerializeObject(message);
제 경우 Json Property atrtibute를 속성으로 적용하고 있었는데, asp.net core 3.1을 사용하고 있었기 때문에 System에서 입력합니다.JSON의 유형이 아닌 Text.Json이 사용되었습니다.Net. 따라서 asp.core 3.1을 사용하기 시작하면 json에 사용할 라이브러리를 결정해야 합니다.HTH
ID 속성을 [System]으로 표시하여 이 문제를 해결했습니다.런타임시리얼화JsonProperty가 아닌 DataMember(Name="_id"])입니다.왜 원래 효과가 없었는지는 아직 확실히 알 수 없지만...
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.record
활자, 즉 를 사용해야 '를 .property:
다음 질문에서 설명한 필드 접두사:
public record Person
(
[property:JsonPropertyName("name")]
string Name,
);
Json Property 태그가 무시되고 있는 것도 발견했습니다.결국 뉴턴소프트 Json을 로드하는 데 소리 없는 실패가 원인이라는 것을 알게 되었습니다.낸시 씨리얼라이제이션이요JsonNet은 Newtonsoft Json 9.0.0을 로드하려고 합니다.이것은, 인스톨 한 것보다 전의 버전입니다.에러는 발생하지 않고, 시리얼 라이저는 낸시에 의해서 제공되고 있습니다.시리얼화JsonNet을 사용할 수 없습니다.애플리케이션 구성에 라이브러리 매핑을 추가하면 다음 문제가 해결되었습니다.
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
이는 메인 메서드 내에서 JsonNetSerializer를 조기에 로드하려고 시도함으로써 발견되었습니다.
Type t=typeof(JsonNetSerializer);
이로 인해 로드 오류가 발생하여 구성 해결로 이어졌습니다.
언급URL : https://stackoverflow.com/questions/8424151/json-net-serializer-ignoring-jsonproperty
'programing' 카테고리의 다른 글
워드프레스 테마에 Ajax를 추가하는 방법 (0) | 2023.04.03 |
---|---|
WooCommerce 미니 카트 위젯에서 카트 및 체크아웃 버튼 링크 변경 (0) | 2023.04.03 |
LINQ를 JSON으로 설정할 수 있습니까? (0) | 2023.04.03 |
초기 자동 에이잭스 호출 사용 안 함 - DataTable 서버 측 페이징 (0) | 2023.02.12 |
제품 코드 구축 방법 및 사용 방법 웹 팩 (0) | 2023.02.12 |