处理后序列化Linq2Sql对象

时间:2013-03-20 23:28:18

标签: xml linq linq-to-sql serialization datacontext

我正在尝试找到一种序列化任何对象的简单方法,以便只包含 immediate 属性及其“ToString”值。对于来自DataContext的对象,我希望能够忽略属性的属性(即,如果属性是复杂对象,也不要序列化该对象)。如果未加载属性,这一点尤为重要,因为它会导致错误“在处理完对象后无法访问它”...

我创建了以下内容,但在尝试访问未在原始datacontext调用中加载的属性时失败。

string typeString = o.GetType().Name;
        StringBuilder xml = new StringBuilder();
        xml.AppendFormat("<{0}>\r\n", typeString);

        foreach (PropertyInfo property in o.GetType().GetProperties())
        {
            var propertyValue = property.GetValue(o, null);
            if (property.GetType() != typeof(System.Data.Linq.Binary) && property.PropertyType.Name != "EntitySet`1" && property.GetCustomAttributes(typeof(XmlIgnoreAttribute), true).Count() == 0)
            {
                xml.AppendFormat("<{0}>{1}</{0}>\r\n", property.Name, propertyValue);
            }

        }

        xml.AppendFormat("</{0}>", typeString);

        return xml.ToString();

1 个答案:

答案 0 :(得分:1)

你可以使用适当的股票序列化&#34;忽略&#34;属性,例如使用DataContractSerializerIgnoreDataMemberAttribute对您不希望序列化的属性。

如果您希望坚持您勾勒出的方法,可以检查PropertyInfo.PropertyType不要对任何复杂类型的行为采取行动。

您可以使用Type.IsPrimitive来查看某个特定类型是否是原始类型,但这里有一些很好的问题:

https://stackoverflow.com/a/2442544/141172