继我之前的问题之后,我一直致力于将我的对象模型序列化为XML.但我现在遇到了一个问题(quelle surprise!).
我遇到的问题是我有一个集合,它是一个抽象的基类类型,由具体的派生类型填充.
我认为只需将XML属性添加到所涉及的所有类中,一切都会很好.可悲的是,事实并非如此!
所以我在谷歌上做了一些挖掘,现在我明白为什么它不起作用了.在该XmlSerializer其实是在为了序列化对象做一些聪明的反射/通过XML,并且因为它的基础上,抽象类型,它不能弄清楚到底是怎么回事了它的交谈.精细.
我确实遇到过CodeProject 上的这个页面,它看起来好像很有帮助(还没有完全阅读/消费),但我想我也想把这个问题带到StackOverflow表中,看看你是否有任何整洁黑客/技巧,以最快/最轻的方式启动和运行.
有一件事我还要补充的是,我不要想往下走XmlInclude的路线.与它有太多的耦合,系统的这个区域正在大量开发,所以这将是一个真正的维护头痛!
我有一个类定义,其中包含一个返回接口的属性.
public class Foo
{
public int Number { get; set; }
public ISomething Thing { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
尝试使用Json.NET序列化Foo类给出了一条错误消息,例如"无法创建类型为'ISomething'的实例.ISomething可能是一个接口或抽象类."
是否有Json.NET属性或转换器可以让我指定Something在反序列化期间使用的具体类?
当我序列化以下内容时:
[Serializable]
public class Error
{
public string Status { get; set; }
public string Message { get; set; }
public string ErrorReferenceCode { get; set; }
public List<FriendlyError> Errors { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我得到了这个令人作呕的混乱:
<ErrorRootOfstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Printmee.Api">
<_x003C_Errors_x003E_k__BackingField>
An exception has occurred. Please contact printmee support
</_x003C_Errors_x003E_k__BackingField>
<_x003C_LookupCode_x003E_k__BackingField>988232ec-6bc9-48f3-8116-7ff7c71302dd</_x003C_LookupCode_x003E_k__BackingField>
</ErrorRootOfstring>
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?我怎么能这么漂亮?JSON响应还包含k_BackingField
我正在使用ASP.NET MVC Web API,我遇到了这个错误:
'ObjectContent`1'类型无法序列化内容类型'application/xml的响应主体; 字符集= UTF-8' .
我的控制器是:
public Employee GetEmployees()
{
Employee employees = db.Employees.First();
return employees;
}
Run Code Online (Sandbox Code Playgroud)
为什么我收到这个错误?
我知道Python pickling是一种以对象编程方式"存储"Python对象的方式 - 与用txt文件或DB编写的输出不同.
关于以下几点,您有更多细节或参考资料:
换句话说,我正在寻找一个关于酸洗的文档 - Python.doc解释了如何实现pickle但似乎没有深入了解有关序列化的使用和必要性的细节.
我想检查的对象是一个数字,这样.ToString()会导致包含数字和字符串+,-,.
是否可以通过简单的类型检查.net(如:)if (p is Number)?
或者我应该转换为字符串,然后尝试解析加倍?
更新:澄清我的对象是int,uint,float,double等等它不是一个字符串.我正在尝试创建一个将任何对象序列化为xml的函数,如下所示:
<string>content</string>
Run Code Online (Sandbox Code Playgroud)
要么
<numeric>123.3</numeric>
Run Code Online (Sandbox Code Playgroud)
或提出例外.
我的桌面应用程序使用序列化对象XmlSerializer.我被建议改为利用DataContractSerializer.
我应该在哪些场景下使用DataContractSerializer?
非常感谢
评论.
1.输出XML文件存储在本地.没有其他应用程序反序列化该XML文件中的对象.
2.我的应用程序与.NET Framework 3.5 SP1一起运行.
我正在寻找最快的序列化和反序列化.NET对象的方法.这是我到目前为止:
public class TD
{
public List<CT> CTs { get; set; }
public List<TE> TEs { get; set; }
public string Code { get; set; }
public string Message { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public static string Serialize(List<TD> tData)
{
var serializer = new XmlSerializer(typeof(List<TD>));
TextWriter writer = new StringWriter();
serializer.Serialize(writer, tData);
return writer.ToString();
}
public static List<TD> Deserialize(string tData)
{
var serializer = new XmlSerializer(typeof(List<TD>));
TextReader …Run Code Online (Sandbox Code Playgroud) 我正在使用Rails 3.2.0.rc2.我有一个Model,我有一个静态Array,我通过一个表格提供,用户可以选择一个子集Array并将他们的选择保存到数据库,存储在一个列中Model.我在数据库列上使用了serialize,它存储了ArrayRails并正确地将用户的选择转换为Yaml(并在读取该列时返回到数组).我正在使用多选表单输入来进行选择.
我的问题是,我现在拥有它的方式,一切都按照我的预期工作,除了用户的子集数组在发送到服务器时总是有一个空白的第一个元素.
这不是什么大不了的事,我可以编写代码来解决这个事实,但我觉得我只是在做一些语法错误,因为在我看来默认的Rails行为不是故意的添加此空白元素没有任何理由.我一定错过了什么或忘了禁用某种设置.请帮助我理解我所缺少的东西(或者指出一些描述这个的好文档,比我在intertubes上找到的更深入).
subset_arrayTEXT"字段的列serialize :subset_arrayALL_POSSIBLE_VALUES = [value1, value2, value3, ...]f.select :subset_array, Model::ALL_POSSIBLE_VALUES, {}, :multiple => true, :selected => @model.subset_array"model" => { "subset_array" => ["", value1, value3] }UPDATE 'models' SET 'subset_array' = '--- \n- \"\"\n- value1\n- value3\n'正如您所看到的,数组中的这个额外的空白元素是在数据库中发送和设置的.我怎么摆脱它?我的f.select通话中是否缺少参数?
非常感谢赞赏:)
编辑:这是f.select语句生成的HTML代码.看起来好像有一个隐藏的输入被生成,这可能是我的问题的原因?那为什么?
<input name="model[subset_array][]" type="hidden" value>
<select id="model_subset_array" multiple="multiple" name="model[subset_array][]" selected="selected">
<option …Run Code Online (Sandbox Code Playgroud) 我有以下代码来序列化查询集;
def render_to_response(self, context, **response_kwargs):
return HttpResponse(json.simplejson.dumps(list(self.get_queryset())),
mimetype="application/json")
Run Code Online (Sandbox Code Playgroud)
以下是我的 get_querset()
[{'product': <Product: hederello ()>, u'_id': u'9802', u'_source': {u'code': u'23981', u'facilities': [{u'facility': {u'name': {u'fr': u'G\xe9n\xe9ral', u'en': u'General'}, u'value': {u'fr': [u'bar', u'r\xe9ception ouverte 24h/24', u'chambres non-fumeurs', u'chambres familiales',.........]}]
Run Code Online (Sandbox Code Playgroud)
我需要序列化.但它说不能序列化<Product: hederello ()>.因为列表由django对象和dicts组成.有任何想法吗 ?
serialization ×10
.net ×4
c# ×4
python ×2
django ×1
forms ×1
html ×1
inheritance ×1
json ×1
json.net ×1
multi-select ×1
pickle ×1
xml ×1