Я экспериментирую с JavaScriptSerializer для десериализации некоторого JSON в C # и у меня есть пара вопросов относительно использования DataMember.
Я хочу, чтобы у моего класса DataContract было свойство "Parts", которое отображается на объект JSON "rings". Если я установлю DataMember Name = "rings" и назову свойство "Rings", все будет работать как положено. Однако, если я назову свойство «Детали» (оставив DataMember Name = «rings»). Части всегда нулевые.
// this is always null [DataMember(Name = "rings")] public ArrayList Parts { get; set; } // this works fine [DataMember(Name = "rings")] public ArrayList Rings { get; set; }
При десериализации возможно ли сопоставить несколько объектов json одному свойству. Например, входная строка json может содержать не «кольца», а «точку» или «линию». Могу ли я сопоставить все три типа свойству Parts?
JavaScriptSerializer находится в System.Web.Extensions и не знает о DataMemberAttribute.
JavaScriptSerializer
System.Web.Extensions
DataMemberAttribute
Попробуйте DataContractJsonSerializer , который находится в System.Runtime.Serialization.Json.
System.Runtime.Serialization.Json
Я рекомендую вам использовать другую реализацию JSON для .NET. Есть много из них с открытым исходным кодом, которые не требуют смены классов. Вы просто должны передать свой объект, и они знают, что делать.