我有一个控制台应用程序,可以从不同的API获取数据。
接收的数据将映射到自定义类。该类稍后被序列化为json字符串。完成后,我使用urbanShip将其推送到移动应用程序。
我的问题:
我只想在推送到应用程序后看到消息属性。应包括所有其他属性,但需要隐藏它们。其他属性需要应用程序获取有关具有Id的特定对象的信息。
我试过了:
我尝试在我想要显示/隐藏的属性上使用[JsonIgnore]
和[DataMember]
注释。然而,这不起作用,我想知道我怎么能完成这个?
我的代码:
我目前正在序列化并推送的课程:
[DataContract]
public class SubscriberPush
{
[DataMember]
public string TrainId { get; set; }
public string Message { get; set; }
public string Title { get; set; }
public string From { get; set; }
public string To { get; set; }
public bool LateTrain { get; set; }
public bool Canceled { get; set; }
}
设置数据:
pushSub.TrainId = trainAnnouncement.AdvertisedTrainIdent;
pushSub.Title = "the train is late";
pushSub.LateTrain = true;
pushSub.Message = "train is " + span.Minutes + " min late";
string json = Parser.ConvertToJson<SubscriberPush>(pushSub);
UrbanAirship.Push(ee.DeviceToken, json);
串行器:
public static string ConvertToJson<T>(T obj)
{
var json = new JavaScriptSerializer().Serialize(obj);
return json.ToString();
}
JSON:
{"TrainId":"1036","Message":"train is 8 min late","Title":"the Train is late","From":null,"To":null,"LateTrain":true,"Canceled":false}
答案 0 :(得分:1)
您可以JavaScriptSerializer
替换DataMember / DataContract
转化为DataContractJsonSerializer
或者通过json.net序列化程序(最好的)
使用XDocument doc = XDocument.Load(@"C:\temp\image.xml");
var lv1s = from lv1 in doc.Descendants("field")
select new
{
Header = lv1.Attribute("type").Value,
Children = lv1.Descendants("value")
};
StringBuilder result = new StringBuilder();
foreach (var lv1 in lv1s)
{
result.AppendLine(lv1.Header);
foreach (var lv2 in lv1.Children)
result.AppendLine(" " + lv2.Attribute("type").Value);
}
Console.WriteLine(result.ToString());
Console.ReadLine();
属性的一个小例子:
http://www.newtonsoft.com/json/help/html/DataContractAndDataMember.htm