요약 : JavaScriptSerializer.Deserialize를 사용할 때 JSON 데이터의 필드 이름을 .Net 객체의 필드 이름에 매핑하는 방법은 무엇입니까?JavaScriptSerializer.Deserialize - 필드 이름을 변경하는 방법
긴 버전 : 나는 다음과 같은 JSON 데이터 (닷넷 코딩되지 않음) 서버 API
{"user_id":1234, "detail_level":"low"}
에서 나에게오고있는 I가 그것을위한 다음 C# 개체 :
[Serializable]
public class DataObject
{
[XmlElement("user_id")]
public int UserId { get; set; }
[XmlElement("detail_level")]
public DetailLevel DetailLevel { get; set; }
}
여기서 DetailLevel은 값 중 하나 인 "Low"가있는 열거 형입니다.
[TestMethod]
public void DataObjectSimpleParseTest()
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
DataObject dataObject = serializer.Deserialize<DataObject>(JsonData);
Assert.IsNotNull(dataObject);
Assert.AreEqual(DetailLevel.Low, dataObject.DetailLevel);
Assert.AreEqual(1234, dataObject.UserId);
}
을 그리고 그 필드에 데이터가 없기 때문에 마지막 두, 실패 주장 :
이 테스트는 실패합니다. 내가
{"userid":1234, "detaillevel":"low"}
에 JSON 데이터를 변경하면 그 다음은 전달합니다. 하지만 서버의 동작을 변경할 수 없으며 클라이언트 클래스가 C# 관용구에 잘 명명 된 속성을 갖기를 원합니다. JSON에 LINQ를 사용할 수 없기 때문에 Silverlight 외부에서 작업하고 싶습니다. XmlElement 태그가 효과가없는 것처럼 보입니다. 나는 그들이 전혀 관련이 없다는 생각을 어디에서 얻었는지 모르지만 아마 그렇지 않을 것이다.
JavaScriptSerializer에서 필드 이름 매핑을 어떻게 수행합니까? 전혀 끝낼 수 있습니까?
나는 'JavaScriptSerializer'를 싫어한다. 'JwtSecurityTokenHandler'는 정적'JsonExtensions.Serializer' 속성을 통해이를 사용합니다. 즉, 런타임 중에 변경하면 변경되지 않을 것으로 기대하는 다른 코드에 영향을 줄 수 있습니다. 불행히도 이러한 수업 중 많은 부분이 그런 방식입니다. : – NathanAldenSr