4
프로젝트에서이 문제가 떠올랐다. 테이블의 json 문자열이있다. 직렬화 된 엔티티이다.
는 JSON타입을 알지 못하는 비 직렬화 엔티티
{
"Entity":{
"__type":"Book:#Definition",
"BookId":3,
"BookName":"Meloon Dreams",
"Type":2,
"Price":35
}
}
예약 클래스
namespace Definition
{
[DataContract]
public class Book : IEntity
{
[DataMember]
public int BookId { get; set; }
[DataMember]
public string BookName { get; set; }
[DataMember]
public BookType Type { get; set; }
[DataMember]
public decimal Price { get; set; }
}
}
워크 플로 클래스
public class Workflow
{
public int WorkflowId { get; set; }
public IEntity Entity { get; set; }
}
그래서, 컨트롤러 클래스에서 내가 TABL에서 JSON 문자열을 얻을 전자와 나는 그것을 자신의 타입으로 비 직렬화하고 싶다. 그러나 json 문자열 안에 __type 만 입력하면됩니다. 내 말은 내가 대신 IEntity
을 예약을 둘 필요가
workflow.Entity = Serializer.JsonDeserialize<IEntity>(jsonString);
인 클래스 구조를 변경하지 않고 가능성이있다, 또는 JSON에서 유형을 얻을로 변환 할 수 있습니다 대신 IEntity를 입력하고 입력하십시오.
하지만, 내 프로젝트에서 내가 제네릭 클래스를 사용하고 있지 않다, 그것은 일반적인 방법이다. 내 워크 플로 엔터티 속성에 제네릭 형식이 아닌 명시 적 형식이 필요하다는 것을 의미합니다. 그래서 json 엔터티 자체 형식으로 변환하고 deserializer 전달해야합니다. 그러나 나는이 반성에 대해 계속 점검 할 것이다. 감사. – ibubi
코드 샘플을 사용하여 대답을 업데이트하고 더 적절한 것으로 링크를 변경했습니다 (MakeGenericMethod 메서드). - 도움이 되었으면 좋겠어요. – Kel
제 목적을 위해 클래스 구조를 변경해야했습니다. json에서 변환 될 내 엔티티가 json에서 유지되는 유형이기 때문에 : 역설이므로 json을 문자열 메소드로 파싱하여 유형을 가져와야하므로 클래스 구조를 변경하기로 결정했습니다. 그러나 나는 그 방법으로 나의 목적을 달성했고 주제를 다루기 때문에이 게시물을 대답으로 표시했습니다. 어쨌든 고마워. – ibubi