c# - Now to serialise property of my custom class type as string? -
i tried implement getobjectdata iserializable, couldn't working - serialises cdata object.
classes:
public class cdata : ixmlserializable, iserializable { private string m_value; //... public override string tostring() { return m_value; } public void getobjectdata(serializationinfo info, streamingcontext context) { info.addvalue("", m_value); } } public class myclass { public cdata cdata { get; set; } }
code:
myclass myclass = new myclass { cdata = "asd"}; string o = jsonconvert.serializeobject(myclass); // returns {"cdata":{"":"asd"}}, want {"cdata":"asd"}
update. looking solution can avoid changing myclass, because have hundreds of cdata usages , looks more hack rather proper solution.
custom converter looks way go, have remember use custom converter when dealing classes has cdata properties. hoping there should simpler , nicer way of doing (e.g. tried set empty string in info.addvalue("", m_value) or possible there interface)
you @ building custom converter type: http://www.newtonsoft.com/json/help/html/customjsonconverter.htm
edit: don't know of other interface, , doesn't it's possible iserializable. jsonconvert can made pretty flexible. example:
class conv : jsonconverter { public override void writejson(jsonwriter writer, object value, jsonserializer serializer) { writer.writevalue(((cdata)value).etc); } public override object readjson(jsonreader reader, type objecttype, object existingvalue, jsonserializer serializer) { throw new exception(); // didn't bother } public override bool canconvert(type objecttype) { return objecttype == typeof(cdata); } } class wrap { public cdata test { get; set; } } class cdata { public string etc { get; set; } }
and just
jsonconvert.serializeobject(t3, formatting.indented, new conv());
if have many types want handle same way, make logic in canconvert , writejson more complicated, maybe using reflection.
Comments
Post a Comment