我从第三方获得了一个xml,我需要将它反序列化为C#对象.此xml可能包含值为整数类型或空值的属性:attr ="11"或attr ="".我想将此属性值反序列化为类型为可空整数的属性.但XmlSerializer不支持反序列化为可空类型.在使用InvalidOperationException创建XmlSerializer期间,以下测试代码失败{"有一个错误反映了类型'TestConsoleApplication.SerializeMe'."}.
[XmlRoot("root")]
public class SerializeMe
{
[XmlElement("element")]
public Element Element { get; set; }
}
public class Element
{
[XmlAttribute("attr")]
public int? Value { get; set; }
}
class Program {
static void Main(string[] args) {
string xml = "<root><element attr=''>valE</element></root>";
var deserializer = new XmlSerializer(typeof(SerializeMe));
Stream xmlStream = new MemoryStream(Encoding.ASCII.GetBytes(xml));
var result = (SerializeMe)deserializer.Deserialize(xmlStream);
}
}
Run Code Online (Sandbox Code Playgroud)
当我将'Value'属性的类型更改为int时,反序列化失败并出现InvalidOperationException:
XML文档中存在错误(1,16).
任何人都可以建议如何将具有空值的属性反序列化为可空类型(作为null),同时将非空属性值反序列化为整数?有没有任何技巧,所以我不必手动对每个字段进行反序列化(实际上有很多)?
来自ahsteele的评论后更新:
据我所知,此属性仅适用于XmlElementAttribute - 此属性指定元素没有内容,无论是子元素还是正文.但我需要找到XmlAttributeAttribute的解决方案.无论如何我不能改变xml,因为我无法控制它.
仅当属性值为非空或缺少属性时,此属性才有效.当attr具有空值(attr ='')时,XmlSerializer构造函数失败(如预期的那样).
public class Element
{
[XmlAttribute("attr")]
public int Value { get; …Run Code Online (Sandbox Code Playgroud)我试图抽象一些将图像裁剪成模块所需的逻辑,这样就不会弄乱我的模型.该代码基于http://railscasts.com/episodes/182-cropping-images
module CroppableImage
def croppable_image(*image_names)
image_names.each do |image_name|
define_method "#{image_name}_sizes" do
{ :cropped => read_attribute("#{image_name}_size").to_s, :large => "800x800>" }
end
define_method "#{image_name}_geometry" do |style|
style ||= :original
@geometry ||= {}
@geometry[style] ||= Paperclip::Geometry.from_file(eval "#{image_name}.path(style)")
end
define_method "#{image_name}_aspect_ratio" do
width, height = read_attribute("#{image_name}_size").split("x")
width.to_f / height.to_f
end
private
define_method "reprocess_#{image_name}" do
eval "#{image_name}.reprocess!"
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
要将其包含在我的模型中,似乎我必须使用extend.我认为扩展是为了包括类方法.我来自java背景 - 我认为使用extend基本上在类上创建了静态方法.
class Website < ActiveRecord::Base
extend CroppableImage
croppable_image :logo, :footer_image
Run Code Online (Sandbox Code Playgroud)
- 这很有效
那时我真正想要的是创建实例方法.
class Website < ActiveRecord::Base
include CroppableImage
croppable_image :logo, …Run Code Online (Sandbox Code Playgroud) 我有以下字符串
str="HelloWorld How areYou I AmFine"
Run Code Online (Sandbox Code Playgroud)
我希望这个字符串成为以下数组
["Hello","World How are","You I Am", "Fine"]
Run Code Online (Sandbox Code Playgroud)
我一直在使用以下正则表达式,它正确分割但它也省略了匹配模式,我也想保留该模式.我得到的是
str.split(/[a-z][A-Z]/)
=> ["Hell", "orld How ar", "ou I A", "ine"]
Run Code Online (Sandbox Code Playgroud)
它省略了匹配模式.
任何人都可以帮助我如何在结果数组中保留这些字符
我想在这里实现的是让我们说有两个示例网址:
url1 = "http://emy.dod.com/kaskaa/dkaiad/amaa//////////"
url2 = "http://www.example.com/"
Run Code Online (Sandbox Code Playgroud)
如何提取条带化的URL?
url1 = "http://emy.dod.com/kaskaa/dkaiad/amaa"
url2 = "http://http://www.example.com"
Run Code Online (Sandbox Code Playgroud)
URI.parse 在Ruby中清理某些类型的格式错误的URL,但在这种情况下无效.
如果我们使用正则表达式,然后/^(.*)\/$/删除单斜线/距离url1,是无效的url2.
有人知道如何处理这种类型的URL解析吗?
这里的关键是我不希望我的系统具有http://www.example.com/与http://www.example.com被视为两个不同的URL.而且同样适用于http://emy.dod.com/kaskaa/dkaiad/amaa////和http://emy.dod.com/kaskaa/dkaiad/amaa/.
如何在 中创建动态主机axios?
例子:
const host = location.hostname;
// axios.defaults.baseURL = 'http://hastore.local';
axios.defaults.baseURL = host;
axios.defaults.port = 8080;
axios.get('api/categories')
.then((res) => {
this.categories = res.data;
console.log(res);
})
.catch((err) => {
console.warn('error during http call', err);
});
Run Code Online (Sandbox Code Playgroud)
字符串axios.defaults.baseURL = 'http://hastore.local';不适合,因为在生产中不起作用。
字符串const host = location.hostname;也不是解决方案,因为我得到了不正确的端口和重复的主机。
目标是根据环境找到合适的主机。我读了很多关于这个问题的文章,但没有找到解决方案。感谢帮助!
print "Enter your password: "
pass = STDIN.noecho(&:gets)
puts "Your password is #{pass}!"
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
Enter your password: input.rb:2:in `<main>': undefined method `noecho' for #<IO:<STDIN>> (NoMethodError)
Run Code Online (Sandbox Code Playgroud) 我在页面上有以下内容 - 此Plunker中的完整代码
有一个自定义onEnter指令,当在聊天表单输入上按下enter时调用一个函数.下面的代码片段
//**HTML View**
<div ng-controller="mainCtrl">
<ul>
<li ng-repeat="chat in chatMessages">
{{chat.username}}<br/>
{{chat.message}}
</li>
</ul>
</div>
<form id="chatForm" name="chatForm" ng-controller="formCtrl">
<label for="chat-username">User: </label>
<input type="text" id="chat-username" class="chat__username" ng-model="chat.username" required>
<label for="chat-input">Chat: </label>
<input type="text" id="chat-input" class="chat__input" on-enter="sendChat()" ng-model="chat.message" required>
<a href="#" class="chat__submit icon-comments" id="chat-submit" ng-click="sendChat()" ng-disabled="isChatValid()">Chatme</a>
</form>
//**Javascript**
app.controller('formCtrl',function($scope,Chats){
$scope.sendChat = function() {
if($scope.isChatValid()) {
return;
}
console.log(JSON.stringify($scope.chat));
var msg = {};
angular.copy($scope.chat,msg);
Chats.data.push(msg);
};
$scope.isChatValid = function() {
return $scope.chatForm.$invalid;
};
});
Run Code Online (Sandbox Code Playgroud)
问题是input( …
例如,如何从Savon请求中删除HTTP标头
client.request 'v5:ProcessShipments' do
client.http.headers["SOAPAction"] = "example_post"
end
Run Code Online (Sandbox Code Playgroud)
这会产生
DEBUG -- : SOAPAction: example_post
Run Code Online (Sandbox Code Playgroud)
服务器会响应
Server did not recognize the value of HTTP Header SOAPAction: example_post.
Run Code Online (Sandbox Code Playgroud)
但是,我不想要任何SOAPAction(s)
我试图清除变量并删除它.我搜索了一会儿,找不到任何东西,所以我希望以前没有问过.
提前致谢.
如果我不覆盖它,那么默认情况下Savon将使用client.request'v5:ProcessShipments',这也是不正确的.