NewtonSoft JSON을 사용하여이 유형의 객체로 역 직렬화하는 방법은 무엇입니까? 구조에는 속성 유형 변수가 포함되어 있지만이 구조를 기반으로하는 NewtonSoft를 사용하면이 속성이 다른 클래스가됩니다.
다음 코드 예 :
public class RootProduct
{
public Package Package {get; set;}
}
public class Package
{
//Package has a property in which the class type should be changed in order to deserialize
public Package_id ThisValueIsVariable {get; set;}
}
public class Package_id
{
public string product_name {get; set;}
}
이 패키지의 데이터 쿼리에서 Package_id를 보내야합니다.이 쿼리의 반환은 아래 구조와 같이 수신됩니다. "Package_id"필드 (JSON 반환)는 쿼리에서 보낸이 코드입니다.
반환 된 JSON :
"Package": {
"Package_id": { //This is the value that changes according to the value passed in the query to JSON
"package_name": "my product name"
}
}
"Package": {
"SecondPackage_id": { //This is the value that changes according to the value passed in the query to JSON
"package_name": "my product name"
}
}
"Package": {
"ThirdPackage_id": { //This is the value that changes according to the value passed in the query to JSON
"package_name": "my product name"
}
}
최신 정보:
위 코드에서는 이름이 "package_id"인 클래스가 하나만 있기 때문에 첫 번째 제품 만 역 직렬화되고 두 번째 및 세 번째 JSON 항목은 SecondPackage_id 클래스가 연속적으로 존재하지 않기 때문에 JsonConvert.Deserialize를 사용하여 역 직렬화되지 않습니다.
솔루션은 런타임 전에 이름을 알고 있는지 여부에 따라 다릅니다.
가능한 이름을 미리 알고 있으면 다음과 같이 Package 클래스의 각 유형에 대해 별도의 속성을 만들 수 있습니다.
public class Package
{
public Package_id FirstPackage {get; set;}
public Package_id SecondPackage {get; set;}
public Package_id ThridPackage {get; set;}
}
다른 속성은 null로 다시 직렬화해야합니다.
런타임에 가능한 ID를 모르는 경우 실제로 키 값 쌍을 수신하는 것입니다. 키가 객체마다 다르기 때문에 기술적으로 여러 개가있을 수 있습니다 (당신의 경우에는 항상 하나 일 수도 있음). 사전을 사용하여 JSON에서 (다중) 명명 된 개체 가져 오기
public class RootProduct
{
//No package class needed
public IDictionary<string, Package_id> Package {get; set;}
}
public class Package_id
{
public string product_name {get; set;}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다