참고 :이 답변은 당신이 Json.Net을 사용하게 될 가정 작성되었습니다. 내가 게시 한 후, 당신이 당신의 질문에 당신이 어떤 시리얼 라이저를 사용했는지 (또는 사용하고 싶었다) 언급하지 않았다는 것을 깨달았다. 난 당신이 여전히 다른 serializers와 함께 여기에 제시된 것과 동일한 기술을 사용할 수 있다고 생각하지만, 조정을해야 할 수도 있습니다. YMMV.
음, 한 당신의 매핑이 중복되지 않는 한, 다음 하나의 간단한 해결책은 Json.Net 올바른 공공 속성을 설정 할 사용하는 클래스에 개인 setter를하는 것입니다. Json.Net은 JSON에없는 클래스 멤버를 무시할 것이므로이 방법이 효과적입니다.다음은 수정 된 클래스는 당신이 접근했다 경우처럼 보일 것 인 것이다 :
class DeserializedJson
{
public string field_1 { get; set; }
public string field_2 { get; set; }
public string field_3 { get; set; }
[JsonProperty]
private string field_007
{
set { field_3 = value; }
}
[JsonProperty]
private string field_111
{
set { field_1 = value; }
}
}
을 그리고 여기에이 작품을 증명하는 데모입니다 :
class Program
{
static void Main(string[] args)
{
DeserializeAndDump(1, @"{""field_1"":""a"",""field_2"":""b"",""field_3"":""c""}");
DeserializeAndDump(2, @"{""field_1"":""d"",""field_2"":""e"",""field_007"":""f""}");
DeserializeAndDump(3, @"{""field_111"":""g"",""field_2"":""h"",""field_3"":""i""}");
}
private static void DeserializeAndDump(int n, string json)
{
Console.WriteLine("--- API " + n + " ---");
DeserializedJson obj = JsonConvert.DeserializeObject<DeserializedJson>(json);
Console.WriteLine("field_1: " + obj.field_1);
Console.WriteLine("field_2: " + obj.field_2);
Console.WriteLine("field_3: " + obj.field_3);
Console.WriteLine();
}
}
출력 :의
--- API 1 ---
field_1: a
field_2: b
field_3: c
--- API 2 ---
field_1: d
field_2: e
field_3: f
--- API 3 ---
field_1: g
field_2: h
field_3: i
물론 JSON의 field_007
이 가끔 field_3
으로 매핑되고 때로는 클래스의 field_2
에 매핑되는 경우이 접근 방식이 작동하지 않습니다. 이 경우 각기 다른 API 메소드에 대해 별도의 DeserializedJson 클래스를 만들어야합니다. 이들 모두를 같은 기본 클래스에서 상속 받도록 만들 수 있으며 각 하위 클래스에서 위의 기술을 사용하여 기본 클래스의 올바른 속성을 설정할 수 있습니다. 다음은 그의 모습 내용은 다음과 같습니다
class DeserializedJson
{
public string field_1 { get; set; }
public string field_2 { get; set; }
public string field_3 { get; set; }
}
class DeserializedJsonAPI1 : DeserializedJson
{
[JsonProperty]
private string field_007
{
set { field_2 = value; }
}
}
class DeserializedJsonAPI2 : DeserializedJson
{
[JsonProperty]
private string field_007
{
set { field_3 = value; }
}
}
데모 :
class Program
{
static void Main(string[] args)
{
DeserializeAndDump<DeserializedJsonAPI1>(1, @"{""field_1"":""q"",""field_007"":""r"",""field_3"":""s""}");
DeserializeAndDump<DeserializedJsonAPI2>(2, @"{""field_1"":""x"",""field_2"":""y"",""field_007"":""z""}");
}
private static void DeserializeAndDump<T>(int n, string json) where T : DeserializedJson
{
Console.WriteLine("--- API " + n + " ---");
DeserializedJson obj = JsonConvert.DeserializeObject<T>(json);
Console.WriteLine("field_1: " + obj.field_1);
Console.WriteLine("field_2: " + obj.field_2);
Console.WriteLine("field_3: " + obj.field_3);
Console.WriteLine();
}
}
출력 : JSON은지도에서 당신이하는 "field_xxx"값을 결정하려면 어떻게
--- API 1 ---
field_1: q
field_2: r
field_3: s
--- API 2 ---
field_1: x
field_2: y
field_3: z
클래스에있는 필드 ? –
@BrianRogers 내 업데이트를 확인하십시오. field_xxx는 엄격히 지정된 형식으로 나타날 수 있습니다. – Saint
어떤 시리얼 라이저를 사용하고 있습니까? – Grx70